? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??原創(chuàng)者:文思
一嚣镜、
? ? ? ?Spring Boot使用“習(xí)慣優(yōu)于配置”(項目中存在大量的配置,此外還內(nèi)置了一個習(xí)慣性的配置魄藕,讓你無需手動進行配置)的理念讓你的項目快速運行起來湃交。所以钻趋,我們要想把Spring Boot玩的溜,就要懂得如何開啟各個功能模塊的默認(rèn)配置。Spring Boot使用了一個全局的配置文件application.properties壁晒,放在src/main/resources目錄下骂际。Sping Boot的全局配置文件的作用是對一些默認(rèn)配置的配置值進行修改疗琉。 ? ? ? ? ? ? ?
? ? ? ? application.properties提供自定義屬性的支持,這樣我們就可以把一些常量配置在這里:
配置獲取及使用方式:
1歉铝、好用的value
在要使用的地方通過注解@Value(value=”${config.name}”)就可以綁定到你想要的屬性上面
@value很強大盈简,默認(rèn)取了resource下的application和testproperties兩個配置文件中的屬性都可以去掉,不需要指名哪個文件
??二太示、
有時候?qū)傩蕴嗔四停粋€個綁定到屬性字段上太累,可以創(chuàng)建一個配置文件的對象的bean类缤,這里我們建一個ConfigBean.java類臼勉,頂部需要使用注解@ConfigurationProperties(prefix = “test”)來指明使用哪個?
Application.propertis:
server.port=8081
test.testconfig=test-ConfigurationProperties
testproperties.properties:
test.user=2
test.psw=3
說明:
@ConfigurationProperties(prefix="test")中不用指明要獲取哪個配置文件的屬性,可以自動根可prefix自動查找所有配置文件中test開頭的屬性餐弱。port在配置文件中是以server開頭宴霸,所以取不到就默認(rèn)成了0囱晴。
再嘗試一種情況,我想在一個類中取多個prefix指定的屬性封裝成類瓢谢,可以嗎畸写?試試看:
這樣寫不報錯,難道支持多前綴的參數(shù)同時取嗎氓扛?應(yīng)該是value的值的格式 無法進行校驗吧枯芬,這也正常。但是所有定義的這些屬性都可以取到值嗎采郎?
看運行結(jié)果:什么值都沒有取到千所。和推測的有點不一樣,難道@ConfigurationProperties只支持使用一種前綴參數(shù)嗎尉剩?所以下一步要重點研究一下@ConfigurationProperties這個注解了真慢,看看此注解的源碼,此分析放在下一篇文中理茎。
因為有@EnableAutoConfiguration了黑界,所以嘗試去掉@EnableConfigurationProperties({ConfigBean.class}),結(jié)果報錯無法啟動皂林,說ConfigBean無法找到朗鸠。
根據(jù)注解名稱來推測原因:@EnableAutoConfiguration,auto自動的意思础倍,自動找的話一般都是按常用約定來吧烛占,而application.properties就是boot的默認(rèn)約定配置文件,那改成ApplictionBean試試看:
仍然報錯沟启,同時@value仍然可以取得配置文件值忆家,說明@EnableAutoConfiguration這個注解就不是針對默認(rèn)和自定義配置文件類處理的。所以下一步要重點研究一下@EnableAutoConfiguration這個注解了德迹,個人推測是boot框架中自身模塊的自動配置管理服務(wù)芽卿。
三、
配置文件的優(yōu)先級:
配置文件中${random}可以用來生成各種不同類型的隨機值胳搞,從而簡化了代碼生成的麻煩卸例,例如生成int值、long值或者string字符串肌毅。
config.secret=${random.value}
config.number=${random.int}
config.bignumber=${random.long}
config.uuid=${random.uuid}
config.number.less.than.ten=${random.int(10)}
config.number.in.range=${random.int[1024,65536]}
application.properties和application.yml文件可以放在一下四個位置:
外置筷转,在相對于應(yīng)用程序運行目錄的/congfig子目錄里。
外置悬而,在應(yīng)用程序運行的目錄里
內(nèi)置呜舒,在config包內(nèi)
內(nèi)置,在Classpath根目錄
同樣摊滔,這個列表按照優(yōu)先級排序阴绢,也就是說店乐,src/main/resources/config下application.properties覆蓋src/main/resources下application.properties中相同的屬性。
Profile-多環(huán)境配置
當(dāng)應(yīng)用程序需要部署到不同運行環(huán)境時呻袭,一些配置細(xì)節(jié)通常會有所不同眨八,最簡單的比如日志,生產(chǎn)日志會將日志級別設(shè)置為WARN或更高級別左电,并將日志寫入日志文件廉侧,而開發(fā)的時候需要日志級別為DEBUG,日志輸出到控制臺即可篓足。
如果按照以前的做法段誊,就是每次發(fā)布的時候替換掉配置文件,這樣太麻煩了栈拖,Spring Boot的Profile就給我們提供了解決方案连舍,命令帶上參數(shù)就搞定。
在Spring Boot中多環(huán)境配置文件名需要滿足application-{profile}.properties的格式涩哟,其中{profile}對應(yīng)你的環(huán)境標(biāo)識索赏,比如:
application-dev.properties:開發(fā)環(huán)境
application-prod.properties:生產(chǎn)環(huán)境
想要使用對應(yīng)的環(huán)境,只需要在application.properties中使用spring.profiles.active屬性來設(shè)置贴彼,值對應(yīng)上面提到的{profile}潜腻,這里就是指dev、prod這2個器仗。
#開發(fā)運行環(huán)境
spring.profiles.active=dev
教程二上級整理講解完畢融涣,敬請期待下集。