近來在利用閑暇時間鞏固下SpringBoot的基本知識,然后自己也做一些筆記,整理下當時所學知識,后面就干脆寫到這里來了。
多Profile配置文件
在SpringBoot主配置文件編寫的時候,文件名可以是application-{profile}.properties/yml。
默認使用的是application.properties配置文件的配置。
1 applicaiton.properties 2 application-dev.properties 3 application-test.properties 4 application-prod.properties
激活指定配置文件
1、主配置文件中指定激活的profile
如果是properties格式的配置文件,那么可以在主配置文件中這樣指定激活的profile:
spring.profiles.active = dev
如果是yml格式的配置文件,你可以用“---”來划分文檔塊,每個文檔塊都被看作是一個profile,你可以在主文檔塊中指定生效的profile:
1 server: 2 prot: 8081 3 spring: 4 profiles: 5 active: dev # 指定激活哪個配置文件 6 7 # yml格式配置文件中,用三個橫線來區分文檔塊 8 # 第一個文檔塊表示主文檔塊,並同時指定后續生效的是哪個文檔塊 9 10 --- 11 # 第二個文檔塊 12 server: 13 port: 8082 14 spring: 15 profiles: dev # 聲明文檔塊類型 16 17 --- 18 # 第三個文檔塊 19 server: 20 port: 8083 21 spring: 22 profiles: dev
2、命令行激活
在實際生產環境中直接使用命令行啟動項目,啟動的同時可以指定激活的profile:
java -jar --spring.profiles.active=dev my-spring-boot-app.1.0.0.jar
3、設置虛擬機參數激活
同樣,你可以通過設置Java虛擬機參數的方式來激活指定profile:
[vm options:] -Dspring.profiles.action=dev
IDEA編輯器設置:
命令行指定的方式和虛擬機參數設置的方式指定,都可以在IDEA的運行設置中進行配置,如下圖:
加載位置與順序
SpringBoot啟動會掃描以下位置的application.properties/yml文件作為spring boot的默認配置文件:
file:./config/ file:./ classpath:/config/ classpath:/
以上是按照優先級從高到低的順序,所有位置的文件都會被加載,高優先級配置內容會覆蓋低優先級配置的內容,並形成互補配置;當然,我們也可以通過spring.config.location來改變默認配置。
上面的:
- file: 指當前項目根目錄
- classpath: 指當前項目的resources目錄
給出一個圖例:
注意:maven打包是不能把src外面的兩個application.properties文件打到jar包里的。
在項目打包好之后,我們可以通過命令行參數的形式,啟動項目的時候來指定配置文件的新位置,指定配置文件和默認加載的這些配置文件會共同生效,並形成互補配置。
這在運維的時候很有用,因為可以通過命令行的方式指定生效的配置文件,較為靈活。
外部配置
SpringBoot還支持多種外部配置方式,生效優先級從高到低,高優先級的配置覆蓋低優先級的配置,所有的配置形成互補配置。
- 命令行參數
- 來自java:comp/env的JNDI屬性
- Java系統屬性(System.getProperties())
- 操作系統環境變量
- RandomValuePropertySource配置的ramdom.*屬性值
- jar包外部的application-{profile}.properties或application.yml(帶spring.profile)配置文件
- jar包內部的application-{profile}.properties或application.yml(帶spring.profile)配置文件
- jar包外部的application.properties或application.yml(不帶spring.profile)配置文件
- jar包內部的application.properties或application.yml(不帶spring.profile)配置文件
- @Configuration注解類上的@PropertySource
- 通過SpringApplication.setDefaultProperties指定的默認屬性
其實在官網有17種這樣的配置說明,可以從下面進入:
https://docs.spring.io/spring-boot/docs/2.1.6.RELEASE/reference/html/boot-features-external-config.html
重點關注上面列舉的1、6、7、8、9這幾項,生效的配置文件,都是由jar包外向jar包內進行尋找的,優先加載帶profile,再加載不帶profile的。比如有個application.properties的配置文件和xxx.jar放置在同一個目錄,那么項目啟動時一定是先加載這個application.properties文件,再去加載xxx.jar里面的配置文件的。
參考資料
1、https://docs.spring.io/spring-boot/docs/2.1.6.RELEASE/reference/html/