簡體   English   中英

Spring Boot @ConfigurationProperties正確用法

[英]Spring Boot @ConfigurationProperties correct usage

實際上,我們實際上是將Spring Boot的@ConfigurationProperties用作配置映射器:它為我們提供了一個簡單的快捷方式來映射對象上的屬性。

@ConfigurationProperties("my.service")
public class MyService {
    private String filePrefix;
    private Boolean coefficient;
    private Date beginDate;
    // getters/setters mandatory at the time of writing

    public void doBusinessStuff() {
        // ...
    }
}

盡管當我們對應用程序進行原型設計時,這可以極大地提高生產力,但我們還是質疑這是否是正確的用法。

我的意思是,配置屬性在Spring Boot的上下文中具有不同的狀態,它們通過執行器端點公開,它們可用於觸發條件Bean,並且似乎更傾向於技術配置屬性。

問:在任何業務屬性/值上使用此機制是否“正確”,還是很容易濫用?

我們錯過了任何潛在的缺點嗎?

現在,我們唯一關心的是我們不能在不可變類上使用@ConfigurationProperties ,這與Spring Boot的跟蹤器上的此問題密切相關: 允許基於字段的@ConfigurationProperties綁定

如果您的媒體資源表示可根據環境/配置文件進行配置的內容,那么該機制就可以實現此目的。 盡管我不太清楚您所說的“在對象上映射屬性”的含義。

我一般不喜歡這種樣式,特別是如果您的bean具有多個要設置的屬性時。 一個更標准的習慣用法是有一個類,用於封裝用於創建bean的屬性/設置:

@ConfigurationProperties("my.service")
public class MyServiceProperties {
    private String filePrefix;
    private Boolean coefficient;
    private Date beginDate;
    // getters/setters mandatory at the time of writing   
}

那么您的Service類將如下所示:

@EnableConfigurationProperties(MyServiceProperties.class)
public class MyService {
    @Autowired
    private MyServiceProperties properties;
    //do stuff with properties

    public void doBusinessStuff() {
        // ...
    }
}

這至少可以讓您通過其構造函數輕松地將屬性傳遞給不可變的類(制作任何可變屬性的副本)。 如果您發現應用程序的其他部分需要某些共享配置,則還可以重復使用具有屬性bean的屬性。

暫無
暫無

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

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