yml
配置文件很好用,可是實際生產中會有不少問題。java
首先咱們創建一個工程,將
application.properties
文件後綴改爲application.yml
。springname: 張三 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中的最後一個爲準!