application.properties加載
Spring Boot啟動會掃描以下位置的application.properties或者application.yml文件作為Spring Boot的默認配置文件
- file:/config/
- file:/
- classpath:/config/
- classpath:/
以上順序按照優先級從高到低的順序,所有位置的文件都會被加載,高優先級的配置內容會覆蓋低優先級配置的內容,其中配置文件中的內容是互補配置,即
- 存在相同的配置內容,高優先級的內容會覆蓋低優先級的內容
- 存在不同的內容的時候,高優先級和低優先級的配置內容取並集
我們也可以通過spring.config.location來改變默認的配置,具體做法就是項目打包好以后,我們可以使用命令行參數的形式,啟動項目的時候來指定配置文件的新位置,指定配置文件和默認加載的配置文件共同起作用稱為互補配置
java -jar spring-boot-02-config-02-0.0.1-SNAPSHOT.jar --spring.config.location=D:/application.properties
外部配置的加載順序
Spring Boot也可以從以下位置加載配置: 優先級從高到低順序,高優先級覆蓋低優先級,如有不同內容,高優先級和低優先級形成互補配置
- 命令行參數
命令行參數的優先級是最高的,假定內部配置的最高優先級配置文件配置的啟動端口號是8081,啟動命令行參數如以下設置:
java -jar spring-boot-02-config-02.0.0.1-SNAPSHOT.jar --server.port=8089
那么啟動的端口就改成了8089,命令行可以把項目的所有的配置選項全部都改掉
- 來自java:comp/env的JNDI屬性
- java系統屬性(System.getProperties())
- 操作系統環境變量
- RandomValuePropertySource配置的
random.*
屬性值 - 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指定的默認屬性
看了以上的配置順序,下面來思考一個問題,如果我要配置的東西太多,而且項目已經打包,我命令行重新配置參數太麻煩,應該怎么辦?
看看上面的11個選項,我們會發現,2,3,4,5配置方法反而比命令行還要麻煩,所以我們可以利用6,7,8,9在項目打包之后,仍然修改配置參數
具體做法如下:
1. 首先找到項目打包好的jar包,放置到一個文件夾里面,例如app
2. 將打包好的jar包移動到這個文件夾里面
3. 在同級目錄下創建一個新的application.properties文件,創建好的文件夾的目錄結構如下所示:
-------------------app-------------------------
application.properties //需要重新配置的參數在這
spring-boot-02-config-02.0.0.1.SNAPSHOT.jar
-----------------------------------------------
4. 在新創建的application.properties文件里面配置我要重新配置的參數