springboot 外部配置<上篇>
SpringBoot允許在外部進行配置,讓你在不同的環境中運行相同的代碼。你可以通過屬性文件、YAML文件、環境變量和命令行來進行外部配置。屬性值可以直接通過@Value註入,並可以通過Spring的Environment抽象類 或者 綁定了@ConfigurationProperties的實體類訪問。
1、配置隨機值。
RandomValuePropertySource在註入隨機值時候非常有用(例如測試程序、加密程序中),它可以生成int、long、uuids和string等等。
my.secret=${random.value} my.number=${random.int} my.bignumber=${random.long} my.uuid=${random.uuid} my.number.less.than.ten=${random.int(10)} my.number.in.range=${random.int[1024,65536]}
2、命令行配置
默認情況下spring boot會轉換命令行中的參數(以--開頭,例如--server.port=9000)轉換成Spring環境中的屬性,命令行設置的屬性值會覆蓋其他地方配置的的屬性值。
你可以通過設置SpringApplication.setAddCommandLineProperties(false)來禁用命令行配置。
3、應用屬性文件
SrpingApplication會默認加載application.properties中的屬性。這些屬性文件可以放在 :
(1)當前目錄的/config子目錄。
(2)當前目錄
(3)classpath下面的/config子目錄。
(4)classpath根目錄。
列表中後面位置文件屬性會覆蓋前面的。
如果你不喜歡application.properties,你通過改變spring.config.name來指定配置文件。也可以通過spring.config.location來指定多個文件(用逗號隔開),如下:
$ java -jar myproject.jar --spring.config.name=myproject
或
$ java -jar myproject.jar --spring.config.location=classpath:/default.properties,classpath:/override.properties
如果spring.config.location中包含文件夾(相對文件而言),它們必須以/結尾。
配置的搜索順序從後到前,例如參數:classpath:/,classpath:/config/,file:./,file:./config/,則搜索順序為
file:./config/ file:./ classpath:/config/ classpath:/
當自定義配置,它們會被添加到默認配置後面。它們會在默認配置的後面執行,例如自定義配置為classpath:/custom-config/,file:./custom-config/時,搜索順序變成
file:./custom-config/ classpath:custom-config/ file:./config/ file:./ classpath:/config/ classpath:/
這些搜索順序可以使得你在一個配置文件中指定配置順序並能在另一個文件對其進行覆蓋。
4、Profile-specific 屬性文件
除了application.properties之外,可以通過命名為application-{profile}.properties的屬性文件來定義屬性。
profile-specific屬性文件將會覆蓋非profile-specific屬性文件。
如果多個profile-specific屬性文件被配置,則最後的一個會贏得決策。
如果你在spring.config.location中指定了任何配置文件,你的profile-specific屬性文件將不會被考慮。除非你spring.config.location中僅僅指定了文件夾。
5、屬性文件中的占位符
可以用EL表達式引用其他的值,如
app.name=MyApp
app.description=${app.name} is a Spring Boot application
springboot 外部配置<上篇>