@Value獲取值和@ConfigurationProperties獲取值比較
|
@ConfigurationProperties
|
@Value
|
功能
|
批量注入配置文件中的屬性
|
一個個指定
|
鬆散綁定(鬆散語法)
|
支持
|
不支持
|
SpEL
|
不支持
|
支持
|
JSR303數據校驗
|
支持
|
不支持
|
複雜類型封裝
|
支持
|
不支持
|
@Value
@Value("${kafkaConfig.topic}")
@ConfigurationProperties
@Component
@ConfigurationProperties(prefix="configInfo")
public class InfoYml {
private static String fileServiceUp;
public static String getConfInfo(String str){
if(str.equals("fileServiceUp")){
return getFileServiceUp();
}
}
get()、set() 方法
}
application.yml 文件
#### 項目的相關配置信息
configInfo:
##文件服務器dev
指定配置文件
@PropertySource(value = {"classpath:person.properties"})
@Component
@ConfigurationProperties(prefix="configInfo")
配置文件yml還是properties他們都能獲取到值;
如果說,我們只是在某個業務邏輯中需要獲取一下配置文件中的某項值,使用@Value;
如果說,我們專門編寫了一個javaBean來和配置文件進行映射,我們就直接使用@ConfigurationProperties;
激活指定profile
配置文件有多種 test 、prod、dev (例:application-dev.yml)
方法一 在配置文件中 spring.profiles.active=dev (優先級最低)
方法二 啓動jar時, java -jar 【文件名.jar】 --spring.profiles.active=dev
其他方法 在配置tomcat 或者 JVM時 加參數 --spring.profiles.active=dev (優先級最高)
配置文件可放置位置
–file:./config/ 優先級高 應該是src\config
–file:./
–classpath:/config/ 即jar中的WEB-INF/classes/config 代碼中的 src\main\resources
–classpath:/ 優先級低
優先級由高到底,高優先級的配置會覆蓋低優先級的配置;
在後期運維時,可以通過 spring.config.location 參數指定外部配置文件(優先級高)
java -jar 【jar包】 --spring.config.location=【配置文件路徑】
兩種配置文件 優先級
application.properties 和 application.yml 如果兩個文件的配置項、路徑一致,那麼從最後的結果來說,yml內容會被覆蓋。看博文是說yml先加載(具體原因未糾結)。