如果我有application.yaml以下屬性:在春季啓動項目,如何application.yaml加載到Java屬性
myPro:
prop1: prop1value
prop2: prop2value
....
有沒有辦法來此加載到一個Java對象Properties
?
如果我有application.yaml以下屬性:在春季啓動項目,如何application.yaml加載到Java屬性
myPro:
prop1: prop1value
prop2: prop2value
....
有沒有辦法來此加載到一個Java對象Properties
?
如果您遵循reference doc instructions,Spring將處理屬性加載。 總之...
我假設你使用Spring-Boot,因爲它是標記的。 如果您還沒有一個具有以下內容創建/src/main/resources/application.yml
:
myPro:
prop1: prop1value
prop2: prop2value
然後,你可以只注入像這樣你的屬性值:
@SpringBootApplication
public class DemoApplication implements CommandLineRunner {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
@Value("${myProp.prop1}")
String prop1;
@Value("${myProp.prop2}")
String prop2;
@Override
public void run(String... args) throws Exception {
System.out.println(prop1);
System.out.println(prop2);
}
}
默認情況下,春季已經將所有的應用程序在其環境性能這是Properties
一個包裝,例如:
@Autowired
private Environment environment;
public void stuff() {
environment.getProperty("myPro.prop1");
environment.getProperty("myPro.prop2");
}
不過,如果你只是想使用的值,你可以隨時使用@Value
註釋,例如:
@Value("${myPro.prop1}")
private String prop1;
@Value("${myPro.prop2}")
private String prop2;
最後,如果你真的想要一個Properties
對象只有一切myPro
,您可以創建以下豆:
@ConfigurationProperties(prefix = "myPro")
@Bean
public Properties myProperties() {
return new Properties();
}
現在可以自動裝配的屬性和使用它們:
@Autowired
@Qualifier("myProperties")
private Properties myProperties;
public void stuff() {
myProperties.getProperty("prop1");
myProperties.getProperty("prop2");
}
在這種情況下,您不必將其綁定到Properties
,但只要還有它有一個字段名prop1
和另一個字段名prop2
你可以使用自定義的POJO。
這三個選項中還列出了the documentation:
屬性值可以直接被注入到使用
@Value
註解,通過Spring的Environment
抽象訪問或通過@ConfigurationProperties
綁定到結構化對象的豆類。