[英]Spring boot ConfigurationProperties - Inject a TreeMap with a comparator
[英]Spring Inject Values with @ConfigurationProperties and @Value
如果 yaml 屬性文件中未定義屬性,如何從 yaml 注入值並設置默認值? 像下面這樣同時使用 ConfigurationProperties 和 Value 是否有用? 如果沒有,我們還能如何實現它?
屬性文件
app:
prop1: test
prop2: true
map:
key1: value1
key2: value2
Java class:
@Data
@Validated
@ConfigurationProperties("app")
public class properties {
private String prop1;
@Value("${app.prop2:default}")
private Boolean prop2;
@NestedConfigurationProperty
@NotNull
private Map<String,String> prop3;
}
像下面這樣使用 ConfigurationProperties 和 Value 很好用
否。@ConfigurationProperties 向@ConfigurationProperties
表明它應該根據名稱將 java 字段綁定到某些匹配屬性。 但是,要實現 spring 要求具有此注釋的 class 必須是 spring bean(代理類)。 因此,您必須將它與@Configuraiton
或@Component
或其他一些注釋一起使用,為這個 class 創建一個 spring bean。
還有一些其他功能可用,您可以在其他一些 spring bean 上使用另一個注釋@EnableConfigurationProperties(properties.class)
(不是當前具有@ConfigurationProperties
注釋的 class )
最常見的是您使用@Configuration
,然后 spring 將能夠創建 spring bean(此類的代理),然后在您擁有的字段上綁定您期望的值。
由於您已經擁有@ConfigurationProperties("app")
,因此名稱為prop2
的屬性將與應用程序屬性app.prop2
@Data
@Validated
@Configuration <---------------
@ConfigurationProperties("app")
public class properties {
private String prop1;
private Boolean prop2;
@NestedConfigurationProperty
@NotNull
private Map<String,String> prop3;
}
如果您的問題是在 application.properties 中根本不存在屬性的情況下的默認值,那么您可以使用一些值初始化那些 java 字段。
@Data
@Validated
@Configuration <---------------
@ConfigurationProperties("app")
public class properties {
private String prop1 = "default";
private Boolean prop2 = false;
@NestedConfigurationProperty
@NotNull
private Map<String,String> prop3;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.