背景
很多時候,我們專案在開發環境和生成環境的環境配置是不一樣的,例如,資料庫配置,在開發的時候,我們一般用測試資料庫,而在生產環境的時候,我們是用正式的資料,這時候,我們可以利用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下新建如下檔案
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
三、擴充套件練習
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
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
3。6 切換日誌檔案
3。6。1 新建logback檔案
logback-pro.yml (生產日誌)
<?xml version=“1。0” encoding=“UTF-8”?>
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 包啟動配置
專案啟動訪問介面,控制檯列印日誌
友情提示:jar執行指定配置
java -jar xxx。jar ——spring。profiles。active=dev #指定dev配置java -jar xxx。jar ——server。port=9090 #指定啟動埠