SpringBoot多種環境自由切換的實現
yml配置文件很好用,但是實際生產中會有很多問題。
測試是一套配置,生產是一套配置;不同人開發不同的模塊,共用一個yml文件容易發生沖突; 本地開發需要本地化配置調試,本節咱們就把這些頭疼的問題統統解決掉。首先我們建立一個工程,將application.properties文件后綴改成application.yml。
name: 張三lesson: springbootdesc: ${name}同學正在努力學習${lesson}!!! #占位符
DemoController.java
@RestController@RequestMapping('demo')public class DemoController { @Resource private YmlData ymlData; @GetMapping('test') public void test() throws JsonProcessingException {System.out.println(ymlData.getDesc()); }}
YmlData.java
@Data@Componentpublic class YmlData { @Value('${name}') private String name; @Value('${lesson}') private String lesson; @Value('${desc}') private String desc;}
瀏覽器請求下http://localhost:8080/demo/test 看看控制臺,亂碼
設置編碼格式,ide-->file-->setting-->editor-->file encodings
設置完成后application.yml徹底亂碼了,重新輸入,改完重啟,再請求一次,控制臺輸出:
張三正在努力學習springboot!!!
這些跟多環境配置有什么關系?
application-prod.yml
name: 張三prodlesson: springbootdesc: ${name}正在努力學習${lesson}!!!
application-dev.yml
name: 張三devlesson: springbootdesc: ${name}正在努力學習${lesson}!!!
application.yml
spring: profiles: active: dev #多環境變量的精髓,這里確定是加載哪個配置文件?。?!
好了,現在重啟,在執行一次請求,控制臺輸出的是什么?
張三dev正在努力學習springboot!!!
那在調試的時候是否可以選擇加載哪個配置文件呢?,按下圖所示操作
重啟,看看現在打印的是什么?
張三prod正在努力學習springboot!!!
再增加一個application-test.yml
name: 張三test
修改application.yml如下:
spring: profiles: include: test,prod #包含哪些配置 active: dev #多環境變量的精髓,這里確定是加載哪個配置文件?。?!
重新啟動工程看看打印出來什么?
張三prod正在努力學習springboot!!!
從結果我們可以看出,包含了include在內的配置,且相同配置在include的文件中使用的最后一個生效的。
而active文件中即使具有相同的配置(本文中的name配置)也沒有被覆蓋,另外include中包含的配置文件沒有的配置,會在active中補充上來。
總結來說:include和active取并集,相同的配置以include中的最后一個為準!
到此這篇關于SpringBoot多種環境自由切換的實現的文章就介紹到這了,更多相關SpringBoot 環境切換內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!
相關文章: