[英]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.