經過以前的博客:SpringBoot系列——jar包與war包的部署,咱們已經知道了若是實現項目的簡單部署,但項目部署的時候最煩的是什麼?修改爲發佈環境對應的配置!數據庫鏈接地址、Eureka註冊中心地址、Redis服務地址等,部署環境不同,打包的時候就要改爲對應的配置;經常使用的環境有本地開發環境dev,本地測試環境dev-test,生產測試環境prod-test,生產環境prod;html
開發的時候咱們用dev,項目直接運行,不用改配置;發佈本地測試環境的時候,打包以前咱們要先改爲對應配置;上線前發佈生產測試環境的時候要改爲對應配置;正式上線發佈生產環境的時候要改爲對應配置;每次這樣改很麻煩,要是不當心漏改了部分地方,還會形成報錯,當換一我的來部署時,還得先告訴他須要修改的地方,麻煩;java
那麼有什麼好辦法能解決這個問題呢?我就是不想每次在打包以前改配置,我就直接打包、發佈。下面記錄一下利用系統環境變量與.yml配置文件的活躍分支實現「智能部署」;mysql
想了解springboot的配置優先級能夠參考這篇大佬的博客:Spring Boot 配置優先級順序,我這裏簡單總結一下:spring
首先咱們利用bootstrap.yml先於application.yml加載的順序,在bootstrap.yml進行分支選擇sql
spring: config: name: application #配置文件名 profiles: active: ${HUANZI_PROFILES:dev} #選擇配置分支,先讀取系統環境變量,若是沒有則默認值爲 dev
在application.yml裏進行寫各個分支的配置,分支之間用註釋 ---- 隔開數據庫
請看官網截圖介紹:你能夠在一個yml裏面指定多個具體的profile配置,經過配置spring.profiles,判斷使用哪一個配置bootstrap
##### 公共 配置 ####### server: port: 10086 #端口號 servlet: context-path: / #訪問根路徑 spring: application: name: springdatejpa #應用名 --- ##### dev 配置 ####### spring: profiles: dev datasource: #鏈接數據庫 url: jdbc:mysql://localhost:3306/test?serverTimezone=GMT%2B8&characterEncoding=utf-8 username: root password: 123456 driver-class-name: com.mysql.jdbc.Driver msg: 正在使用 dev 配置 --- ##### dev-test 配置 ####### spring: profiles: dev-test datasource: #鏈接數據庫(暫時也先用同一個庫,不然項目報錯起不來) url: jdbc:mysql://localhost:3306/test?serverTimezone=GMT%2B8&characterEncoding=utf-8 username: root password: 123456 driver-class-name: com.mysql.jdbc.Driver msg: 正在使用 dev-test 配置 --- ##### prod-test 配置 ####### spring: profiles: prod-test msg: 正在使用 prod-test 配置 --- ##### prod 配置 ####### spring: profiles: prod msg: 正在使用 prod 配置 ---
固然也能夠用後綴.properties的配置文件,來進行根據活躍的profiles分支選擇vim
建立application-dev.properties,application-dev-test.properties...文件,將具體配置放在具體文件裏,一樣與yml效果一致springboot
PS:默認狀況下yml沒有中文亂碼問題,而properties有bash
另外,官網給出了一個yml的缺點,就是不能使用@PropertySource註釋加載yml文件
更多yml介紹請看官網:24.7 Using YAML Instead of Properties https://docs.spring.io/spring-boot/docs/2.1.0.RELEASE/reference/htmlsingle/#boot-features-external-config-yaml
更多配置文件介紹請看官網:24. Externalized Configuration https://docs.spring.io/spring-boot/docs/2.1.0.RELEASE/reference/htmlsingle/#boot-features-external-config
25. Profiles https://docs.spring.io/spring-boot/docs/2.1.0.RELEASE/reference/htmlsingle/#boot-features-profiles
Windows配置系統環境變量,例如:dev-test
Linux配置系統環境變量,請看這篇文章:Linux環境變量總結,總結下代碼、步驟:
一、
二、
HUANZI_PROFILES
@Value("${msg}") private String msg; /** * 檢查配置分支 */ @RequestMapping("checkProfiles") public String checkProfiles() { return msg; }
有了「智能部署」功能,咱們將全部的分支配置好以後,不論是部署在那個環境,只要在對應的環境設置好對應的系統環境變量,每次均可以直接打包發佈,很是方便!當你沒空發版,想叫其餘同事幫忙發佈,但又怕他不太熟悉時,你就告訴他:
一、更新最新代碼
二、打包、上傳
三、啓動項目(先kill掉舊項目、備份舊項目、啓動新項目、查看啓動日誌確保啓動過程有無報錯)
媽媽不再用擔憂我不會發版了!