当前位置: 首页 > 后端技术 > Java

配置文件这样写,多个环境可以自由切换

时间:2023-04-02 09:19:27 Java

前几章我们讲到yml配置文件,大家还记得吗?效果不错,但是在实际生产中出现了很多问题。测试是一组配置,生产是一组配置;不同的人开发不同的模块,共享一个yml文件容易发生冲突;本地开发需要本地化配置和调试。在本节中,我们将解决所有这些令人头疼的问题。首先,我们创建一个项目,将application.properties文件的后缀改为application.yml。姓名:张三课程:springbootdesc:${name}正在努力学习${lesson}!!!#PlaceholderDemoController.java@RestController@RequestMapping("demo")publicclassDemoController{@ResourceprivateYmlDataymlData;@GetMapping("test")publicvoidtest()throwsJsonProcessingException{System.out.println(ymlData.getDesc());}}YmlData.java@Data@ComponentpublicclassYmlData{@Value("${name}")私有字符串名称;@Value("${lesson}")私人字符串课程;@Value("${desc}")privateStringdesc;}浏览器请求http://localhost:8080/demo/test看控件台,乱码设置编码格式,ide-->file-->setting-->editor-->fileencodingsapplication.yml完全乱码后,重新进入,修改后重启,再次请求,控制台输出:张三努力学习springboot!!!这和多环境配置有什么关系?嗯,没关系,不过你又学会了一个yml文件的占位符,我们后面的例子也会照着这个改。application-prod.ymlname:张三prodlesson:springbootdesc:${name}istryingtolearn${lesson}!!!application-dev.ymlname:ZhangSandevlesson:springbootdesc:${name}istryingtolearn${lesson}!!!application.ymlspring:profiles:active:dev#多个环境变量的本质,这里是判断加载哪个配置文件!!!好了,现在重启,执行一个请求后,控制台的输出是什么?张三dev正在努力学习springboot!!!调试时可以选择加载哪个配置文件吗?,按如图操作重启,看看现在打印的是什么?是的,张三prod正在努力学习springboot!!!再添加一个application-test.ymlname:张三测试修改application.yml如下:spring:profiles:include:test,prod#include哪些配置active:dev#More环境变量的本质,这里是判断到哪个配置文件加载!!!重启项目,看看打印了什么?张三prod正在努力学习springboot!!!从结果中我们可以看到包含include的配置,并且相同的配置是include文件中最后一次使用的配置才会生效。即使活动文件具有相同的配置(本文中的名称配置),也不会被覆盖。另外,include包含的配置文件中没有包含的配置会被添加到active.c中。总结一下:include和active取union,同样的配置以include最后一个为准!更多java原著阅读:https://javawu.com