一、什么是外部化配置
外部化配置是指把應用程序中各種可配置的參數、屬性等信息,從代碼內部提取出來,放置在外部的配置文件、數據庫或配置中心等地方(比如使用.properties、.yml 或.xml 等格式的文件)進行管理。提高應用程序的可維護性、可擴展性和靈活性。通過將配置信息外部化,無需修改和重新部署代碼,就可以調整應用程序的行為和參數,以適應不同的環境(如開發、測試、生產環境)或業務需求的變化。
二、springboot默認讀取路徑
springboot默認的配置文件是application.properties,通過springboot自動的腳手架生成的文件結構如下。其application.properties位于resource下方。
2.1 類路徑下
創建一個配置類,在配置類中訪問配置文件中的myapp.name的值,看看springboot的應用程序會不會自動找到其application.properties中的內容。
package com.example.propertieslocation.config;import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;//納入IoC容器管理
@Component
public class appConfig {@Value("${myapp.name}")private String appPath;public void printInfo(){System.out.println("App Path: " + appPath); }}
?在test中進行測試,發現springboot程序確實可以找到application.properties中的內容。
2.2 類路徑下的config下
?在其類路徑下新建config目錄,并在該目錄中新建application.properties
?再次進行測試,看看其找到的application.properties的文件到底位在哪。
可以看出來其優先找了config目錄下的application.properties。
2.3 外部化的直接路徑
在打包成jar包之前,主入口類添加如下代碼。
package com.example.propertieslocation;import com.example.propertieslocation.config.appConfig;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;@SpringBootApplication
public class PropertiesLocationApplication {public static void main(String[] args) {ConfigurableApplicationContext context = SpringApplication.run(PropertiesLocationApplication.class, args);appConfig appConfig = context.getBean(appConfig.class);appConfig.printInfo();context.close();}}
點擊package打包使其成為jar包。
打包好的jar包如下
并新建application.properties
?進行測試,看springboot程序自動優先找到的是那個路徑下的配置文件
?測試結果如下
優先選擇了外部化配置的?application.properties。
2.4 外部化路徑下的config目錄中
?
并將外部化配置的config中application.properties的內容改成myapp.name=file:./config/。
測試如下:
總結
所以springboot程序查找application.properties的順序是,外部>內部;config中的>當前路徑下的。