首頁 > 軟體

springboot如何引入外部yml組態檔

2022-08-26 14:03:32

springboot引入外部yml組態檔

當需要在springboot中參照其他的yml檔案時,需要在application.yml裡設定

spring:
    profiles:
        include: email,xmyb

值得注意的是:application-email.yml的字首一定要和主在組態檔application.yml的名字一致

springboot引入多個yml

1. 專案內部組態檔

spring boot 啟動會掃描以下位置的application.properties或者application.yml檔案作為Spring boot的預設組態檔

–file:./config/
  –file:./
  –classpath:/config/
  –classpath:/

以上是按照優先順序從高到低的順序,所有位置的檔案都會被載入,高優先順序設定內容會覆蓋低優先順序設定內容。

SpringBoot會從這四個位置全部載入主組態檔,如果高優先順序中組態檔屬性與低優先順序組態檔不衝突的屬性,則會共同存在—互補設定。

我們也可以通過設定spring.config.location來改變預設設定。

java -jar spring-boot-02-config-02-0.0.1-SNAPSHOT.jar --spring.config.location=file:///D:/application.properties,classpath:/,classpath:/config/

專案打包好以後,我們可以使用命令列引數的形式,啟動專案的時候來指定組態檔的新位置。

指定組態檔和預設載入的這些組態檔共同起作用形成互補設定。

Idea 單測啟用自定義設定:新增jvm引數:-Dspring.config.location=file:///D:/project_conf/application.yml -ea

2. 外部設定載入順序

SpringBoot也可以從以下位置載入設定:優先順序從高到低;高優先順序的設定覆蓋低優先順序的設定,所有的設定會形成互補設定。

1. 命令列引數

  • 所有的設定都可以在命令列上進行指定;
  • 多個設定用空格分開; –設定項=值

java -jar spring-boot-02-config-02-0.0.1-SNAPSHOT.jar --server.port=8087 --server.context-path=/abc

2. 來自java:comp/env的JNDI屬性

3. Java系統屬性(System.getProperties())

4. 作業系統環境變數

5. RandomValuePropertySource設定的random.*屬性值

6. jar包外部的application-{profile}.properties或application.yml(帶spring.profile)組態檔

7. jar包內部的application-{profile}.properties或application.yml(帶spring.profile)組態檔

8. jar包外部的application.properties或application.yml(不帶spring.profile)組態檔

9. jar包內部的application.properties或application.yml(不帶spring.profile)組態檔

10. @Configuration註解類上的@PropertySource

11. 通過SpringApplication.setDefaultProperties指定的預設屬性

要新增不同的檔案,您可以使用spring.config.location以逗號分隔的屬性檔案列表或檔案位置(目錄)的屬性。

-Dspring.config.location=your/config/dir/

上面的那個將新增一個目錄,該目錄將參考application.properties檔案。

-Dspring.config.location=classpath:job1.properties,classpath:job2.properties

這會將2個屬性檔案新增到已載入的檔案中。

預設組態檔和位置在附加指定spring.config.location的檔案和位置之前載入,這意味著後者將始終覆蓋先前設定的屬性。(另請參閱“Spring Boot參考指南”的此部分)。

如果spring.config.location包含目錄(而不是檔案),它們應該以/結尾(並且將附加spring.config.name在載入之前生成的名稱)。

classpath:,classpath:/config,file:,file:config/始終使用預設搜尋路徑,而不管其值是多少spring.config.location。

通過這種方式,您可以為應用程式設定預設值application.properties(或者您選擇的任何其他基本名稱spring.config.name),並在執行時使用不同的檔案覆蓋它,保留預設值。

以上為個人經驗,希望能給大家一個參考,也希望大家多多支援it145.com。


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