阿里三面:SpringBoot 多環境配置檔案切換

背景

很多時候,我們專案在開發環境和生成環境的環境配置是不一樣的,例如,資料庫配置,在開發的時候,我們一般用測試資料庫,而在生產環境的時候,我們是用正式的資料,這時候,我們可以利用profile在不同的環境下配置用不同的配置檔案或者不同的配置。

解決方案

spring boot允許你透過命名約定按照一定的格式(application-{profile}。properties)來定義多個配置檔案,然後透過在application。properyies透過spring。profiles。active來具體啟用一個或者多個配置檔案,如果沒有沒有指定任何profile的配置檔案的話,spring boot預設會啟動application-default。properties。

一、新建配置檔案

注:配置檔案優先順序(由高到低):

bootstrap.properties -> bootstrap.yml -> application.properties -> application.yml

此處使用。yml檔案格式,在src/main/resources下新建如下檔案

阿里三面:SpringBoot 多環境配置檔案切換

application.yml (主配置)

server: port: 9990spring: profiles: active: dev #選定配置#自定義預設值curvar: context: default。curvar

application-pro.yml (開發配置)

#模擬開發配置curvar: context: “開發配置變數”

application-pro.yml(生產配置)

#模擬生產配置curvar: context: “生產配置變數”

二、 服務呼叫測試

2。1 新建呼叫類

@Slf4j@RestControllerpublic class IndexController { @Value(“${curvar。context}”) private String cusvar; /** * 。 * 使用哪一個配置 * * @return */ @RequestMapping(“/test”) public String test() { log。debug(“使用:[{}]”, cusvar); return “使用配置: ” + cusvar; }}

2。2 使用樣例專案

開啟瀏覽器輸入:http://localhost:9990/test

阿里三面:SpringBoot 多環境配置檔案切換

阿里三面:SpringBoot 多環境配置檔案切換

三、擴充套件練習

3。1 使用註解標記配置,首先定義一個介面

public interface Connector { String configure();}

3。2 分別定義倆個實現類來實現它

import org。springframework。context。annotation。Profile;import org。springframework。stereotype。Component;@Component@Profile(“pro-db”)//標記檔案,環境切換public class ProConnector implements Connector { @Override public String configure() { return “pro生產標記檔案。。。”; }}

import org。springframework。context。annotation。Profile;import org。springframework。stereotype。Component;@Component@Profile(“dev-db”)//標記檔案,環境切換public class DevConnector implements Connector { @Override public String configure() { return “dev開發標記檔案。。。”; }}

3。3 修改application。yml檔案啟用配置

spring: profiles: #active: dev #選定配置 active: pro-db #選定配置啟用標記檔案

3。4 新增查詢方法

@Autowired private Connector connector; //注入 /** * 。 * 使用哪一個被標記檔案 * * @return */ @GetMapping(“/proFile”) public String proFile() { log。debug(“使用配置檔案:[{}]”, connector。configure()); return connector。configure(); }

開啟瀏覽器輸入:http://localhost:9990/proFile

阿里三面:SpringBoot 多環境配置檔案切換

3。5 使用一個或多個配置檔案及啟用標記檔案

3。5。1 修改application。yml檔案,進行屬性疊加

spring: profiles: include: pro,dev-db #指定配置檔案及啟用標記檔案 #active: pro-db #選定標記檔案

3。5。2 新增查詢方法

/** * 。 * 使用哪一個配置檔案及標記檔案 * * @return */ @GetMapping(“/include”) public String include() { return String。format(“使用配置檔案:%s,使用標記檔案:%s”, cusvar, connector。configure()); }

開啟瀏覽器輸入:http://localhost:9990/include

阿里三面:SpringBoot 多環境配置檔案切換

3。6 切換日誌檔案

3。6。1 新建logback檔案

阿里三面:SpringBoot 多環境配置檔案切換

logback-pro.yml (生產日誌)

<?xml version=“1。0” encoding=“UTF-8”?> logback <!——定義檔名及儲存路徑——> <!—— ConsoleAppender:控制檯設定 ——> debug %d{HH:mm:ss。SSS} %contextName [%thread] %-5level %logger{36} [%file : %line] - %msg%n <!——RollingFileAppender:滾動記錄檔案,先將日誌記錄到指定檔案——> ${log。path} ${log。path}。%d{yyyy-MM-dd}。%i。gz 100MB <!—— 每產生一個日誌檔案,該日誌檔案的儲存期限為7天 ——> 7 %date %level [%thread] %logger{36} [%file : %line] %msg%n <!——將上述name名稱:console:標籤名稱為debug——> <!——將上述name名稱:file:標籤名稱為info——> <!——mybatis的日誌級別為info——> <!——com。hy包下的日誌級別為debug——>

3。6。2 修改application。yml檔案,配置日誌屬性

spring: profiles: #include: pro,dev-db #指定配置檔案及啟用標記檔案 #active: pro-db #選定標記檔案 active: pro #指定配置檔案#日誌logging: config: classpath:logback-${spring。profiles。active}。xml #本地IDEA啟動配置 #config: config/logback-${spring。profiles。active}。xml # java -jar 包啟動配置

專案啟動訪問介面,控制檯列印日誌

阿里三面:SpringBoot 多環境配置檔案切換

友情提示:jar執行指定配置

java -jar xxx。jar ——spring。profiles。active=dev #指定dev配置java -jar xxx。jar ——server。port=9090 #指定啟動埠