在實際企業開發中,應用一般至少有3個環境,開發、測試、uat、生產等環境,對於不同的環境應該有自己的配置,否則每個環境的釋出會很麻煩,並且對運維很不友好。使用Spring Boot的Profile可以實現多場景下的配置切換,方便開發中進行測試和部署生產環境
青鋒開源專案地址Gitee: https://gitee.com/msxy/qingfeng
關注青鋒:獲得更多技術支援和開源資料。
1.1 建立應用配置application.yml檔案分為3部分,使用 --- 來作為分隔符,第一部分通用配置部分,表示2個環境都通用的屬性, 後面2段分別為:預設,開發,用spring.profiles指定了一個值(開發為dev,測試為test,生產為prod),這個值表示該段配置應該用在哪個profile裡面,其中test 單獨建立一個配置檔案,預設的application-{profile}.yml的方式來指定不同環境的配置。使用spring.profiles.active指定設定的spring.profiles名稱
如果spring.profiles.active沒有指定值,那麼只會使用沒有指定spring.profiles檔案的值,也就是隻會載入通用的配置
server: port: 8773spring: application: name: fw-profile profiles: active: dev---spring: profiles: devversion: dev---spring: profiles: prodversion: prod
application-test.yml內容
spring: profiles: testversion: test
1.2 建立控制層
在控制層建立一個獲取配置資訊的方法,裡面的內容使用@Value("${version}")從配置檔案中獲取具體的值,同過修改不同的profile來驗證獲取值的不同。
@RestControllerpublic class HelloController { @Value("${version}") String version; /** * 獲取版本資訊 * @return */ @GetMapping("/version") public String getVersion(){ return version; }}
1.3 應用啟動設定spring.profiles.active指定的profile為dev瀏覽器或Postman輸入localhost:8773/version
修改spring.profiles.active指定的profile為test
1.4 應用部署可以在啟動的時候指定spring.profiles.active來啟動
java -jar xxx.jar --spring.profiles.active=test 表示使用測試環境的配置java -jar xxx.jar --spring.profiles.active=prod 表示使用生產環境的配置
1.5 Maven Profile
我們使用的是構建工具是Maven,也可以透過Maven的profile特性來實現多環境配置啟動和打包
將之前的配置刪除並在pom中設定maven資訊,我們設定dev、test、uat、prod4個環境的配置資訊,並且執行dev 是預設的配置資訊,設定配置目錄為src/main/resources/config/${profiles.active},新建配置資訊如下圖所示。
修改spring.profiles.active指定的profile為test
可以看到和之前透過spring.profiles.active結果是一樣的。
1.7 maven 方式打包透過執行mvn clean package -P ${profile}來指定使用哪個profile,然後啟動的時候直接java -jar xxx.jar,不需要實行profile
兩種方式都可以,推薦使用maven方式來啟動和打包,maven方式打的包只會將自己需要的配置檔案打包,不會講其它profile也打包進來,如果僅僅透過解壓jar包只會獲取當前profile的配置資訊。相對較安全,而且方便CICD構建和部署。