首頁 > 軟體

SpringBoot詳細講解多個組態檔的設定流程

2022-06-08 18:03:27

一般情況下,springboot預設會在resource目錄下生成一個組態檔(application.properties或application.yaml),但其實springboot允許設定多個組態檔(application.properties或application.yaml),但是這並不意味著這些組態檔一定會替換預設生成的組態檔,它們是互補的存在。如果在某些場景下需要把組態檔單獨拿出來並且啟動的時候載入進去,那麼外部的組態檔將是一個很好的選擇。

組態檔載入順序

需要注意的是組態檔載入順序載入順序在springboot 2.4.0前後是不一樣的。

springboot 2.4.0及其之前版本的組態檔載入順序

file:./config/
file:./config/*/
file:./
classpath:config/
classpath:

springboot 2.4.0之後版本的組態檔載入順序

file:./config/*/
file:./config/
file:./
classpath:config/
classpath:

區別在於springboot 2.4.0之後的版本將file:./config/*/的在順序調整為第一載入順序。

file是指當前jar包所在路徑。

classpath是指springboot resource資料夾下路徑。

驗證

前期準備

新建一個springboot專案

啟動類如下:

@SpringBootApplication
public class MqApplication {
	public static void main(String[] args) {
		ConfigurableApplicationContext applicationContext = SpringApplication.run(MqApplication.class, args);
		ConfigurableEnvironment environment = applicationContext.getEnvironment();
		String property = environment.getProperty("spring.application.name");
		System.out.println("current spring.application.name="+property);
	}
}

組態檔:

spring.application.name=classpath
server.port=8080

為了驗證 springboot 2.4.0之前和之後的版本載入順序的不一樣,會使用兩個版本對比。

對比版本:springboot 2.4.3 和 springboot 2.3.5.RELEASE

下面是不同路徑下設定不同埠和應用名以便驗證。

路徑埠號application.name
file:./config/*/8084file:./config/*/
file:./config/8083file:./config/
file:./8082file:./
classpath:config/8081classpath:config/
classpath:8080classpath:

驗證組態檔載入順序

根據上述表格,將組態檔分別複製到不同的路徑下建立組態檔並按表格修改spring.application.name和server.port屬性值。

啟動專案,下面是兩個版本的啟動資訊:

從兩張圖中可以得出結論:

  • springboot 2.4.0前後組態檔載入順序不一樣
  • 高優先順序的會覆蓋掉低優先順序相同的屬性

驗證屬性互補

修改組態檔:

classpath:組態檔

刪除spring.application.name屬性,增加server.error.path屬性

server.port=8080
server.error.path=/test

file:./組態檔

新增server.servlet.context-path屬性

spring.application.name=file:.
server.port=8082
server.servlet.context-path=file_context

file:./config/*/組態檔

保持不變

server.port=8084
spring.application.name=file:./config/*/

修改啟動類main方法在控制檯列印server.error.path

public static void main(String[] args) {
		ConfigurableApplicationContext applicationContext = SpringApplication.run(MqApplication.class, args);
		ConfigurableEnvironment environment = applicationContext.getEnvironment();
		String property = environment.getProperty("spring.application.name");
		System.out.println("current spring.application.name="+property);
		String errorPath = environment.getProperty("server.error.path");
		System.out.println("errorPath="+errorPath);
	}

啟動專案

從上面截圖中可以發現三個組態檔中的所有屬性都被載入出來了,而且優先順序高的組態檔中的屬性會覆蓋優先順序低的組態檔中的屬性。

總結

springboot中可以設定多個組態檔,並且這些組態檔是可以共存的。當屬性相同時,優先順序高的組態檔會覆蓋優先順序低的組態檔中的屬性;當屬性不同時,最終的設定會取各個組態檔中屬性的並集。

到此這篇關於SpringBoot詳細講解多個組態檔的設定流程的文章就介紹到這了,更多相關SpringBoot組態檔內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com