【SpringBoot】多種環境自由切換,只須要配置文件這麼寫

yml配置文件很好用,可是實際生產中會有不少問題。java

  1. 測試是一套配置,生產是一套配置;不一樣人開發不一樣的模塊,共用一個yml文件容易發生衝突;
  2. 本地開發須要本地化配置調試,本節我們就把這些頭疼的問題通通解決掉。

首先咱們創建一個工程,將application.properties文件後綴改爲application.ymlspring

name: 張三
lesson: springboot
desc: ${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

@Databr/>@Component
public class YmlData {springboot

@Value("${name}")
private String name;
@Value("${lesson}")
private String lesson;
@Value("${desc}")
private String desc;

}markdown

> 瀏覽器請求下`http://localhost:8080/demo/test` 看看控制檯,亂碼

設置編碼格式,`ide-->file-->setting-->editor-->file encodings`

![](https://s4.51cto.com/images/blog/202108/12/b60e44d66a9e5949ab46b8cd45a7ac2e.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=)

設置完成後`application.yml`完全亂碼了,從新輸入,改完重啓,再請求一次,控制檯輸出:

張三正在努力學習springboot!!!app

#### 這些跟多環境配置有什麼關係?

嗯,是不要緊,可是你多學了一個yml文件佔位符,且咱們下面的示例也會根據這個變動。![圖片](https://s4.51cto.com/images/blog/202108/12/91098e3176f75c17a768cd0677b8e0db.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=)

application-prod.yml

name: 張三prod
lesson: springboot
desc: ${name}正在努力學習${lesson}!!!less

application-dev.yml

name: 張三dev
lesson: springboot
desc: ${name}正在努力學習${lesson}!!!ide

application.yml

spring:
profiles:
active: dev #多環境變量的精髓,這裏肯定是加載哪一個配置文件!!!學習

好了,如今重啓,在執行一次請求,控制檯輸出的是什麼?

張三dev正在努力學習springboot!!!測試

那在調試的時候是否能夠選擇加載哪一個配置文件呢?,按下圖所示操做

![](https://s4.51cto.com/images/blog/202108/12/43796cd394fe6bf503a57ce99f991248.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=)

重啓,看看如今打印的是什麼?

張三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中的最後一個爲準!
相關文章
相關標籤/搜索