簡體   English   中英

Springboot 無法從屬性文件中讀取值

[英]Springboot can't read values from properties file

我有以下問題:我想從.properties文件中讀取一些值(產品的價格)。

但是我正在嘗試,它總是以0.00作為值。

這是我的服務 bean,我想在其中創建一個產品列表:

@Service
@ConfigurationProperties(prefix = "product-service")
public class ProductService {

    private double first;
    private double second;
    private double third;

    public double getFirst() {
        return first;
    }

    public void setFirst(double first) {
        this.first = first;
    }

    public double getSecond() {
        return second;
    }

    public void setSecond(double second) {
        this.second = second;
    }

    public double getThird() {
        return third;
    }

    public void setThird(double third) {
        this.third = third;
    }

    private List<ProductDTO> productList = Arrays.asList(
            new ProductDTO(1, "Tomb Raider", first),
            new ProductDTO(2, "10000 rp to lol", second),
            new ProductDTO(3, "2k valorant points", third)
    );

    public List<ProductDTO> findAllProducts() {
        return productList;
    }
}

這是屬性文件:

product-service.first = 225.00
product-service.second = 320.50
product-service.third = 150.99

考慮到您使用prefix = "product-service"

您應該如下聲明您的 class 字段。

    private double first;
    private double second;
    private double third;

您還應該更新 getter 和 setter。

您的代碼中還有另一個錯誤

private List<ProductDTO> productList = Arrays.asList(
            new ProductDTO(1,"Tomb Raider",first),
            new ProductDTO(2,"10000 rp to lol",second),
            new ProductDTO(3,"2k valorant points",third)
    );

當您的 class 被初始化時,該字段被初始化。 但是 Spring 使用代理初始化您的 bean。 因此,當productList被初始化時,您的 productList 的firstsecondthird將具有0值。

如果你希望這個工作你應該更換

public List<ProductDTO> findAllProducts() {
        return productList;
    }

public List<ProductDTO> findAllProducts() {
        return Arrays.asList(
                new ProductDTO(1,"Tomb Raider",first),
                new ProductDTO(2,"10000 rp to lol",second),
                new ProductDTO(3,"2k valorant points",third)
        );
    }

不要將您的配置屬性與服務層混合。

你有幾種方法:

  • 創建一個單獨的配置 class:
@ConfigurationProperties("product-service")
public class ProductProperties {
    private Double first;
    private Double second;
    private Double third;
    // getters & setters
}

並直接在您的服務中使用它 class:

class ProductService {
    private ProductProperties properties;

    // use at code: properties.getFirst()
}

根據您的 Spring 引導版本,您可能需要在標有@Configuration的任何 class 下使用@EnableConfigurationProperties({ProductProperties.class})

  • 使用@Value
class ProductService {
    @Value("${product-service.first}")
    private double first;
    //...
}

您應該設置為您的主要 class:

有用的鏈接:

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM