配置文件这样写,多环境自由切换
在之前的章节中我们讲过
yml
配置文件,小伙伴们还记得吗?很好用,但是实际生产中会有很多问题。
- 测试是一套配置,生产是一套配置;不同人开发不同的模块,共用一个yml文件容易发生冲突;
- 本地开发需要本地化配置调试,本节咱们就把这些头疼的问题统统解决掉。
首先我们建立一个工程,将application.properties
文件后缀改成application.yml
。
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
@Data
@Component
public 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!!!
这些跟多环境配置有什么关系? 嗯,是没关系,但是你多学了一个yml文件占位符,且我们下面的示例也会根据这个变更。
文章图片
application-prod.yml
name: 张三prod
lesson: springboot
desc: ${name}正在努力学习${lesson}!!!
application-dev.yml
name: 张三dev
lesson: springboot
desc: ${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中的最后一个为准!
更多java原创阅读:https://javawu.com
推荐阅读
- JAVA(抽象类与接口的区别&重载与重写&内存泄漏)
- 一个小故事,我的思考。
- 今天写一些什么
- 小影写在2018九月开学季
- 标签、语法规范、内联框架、超链接、CSS的编写位置、CSS语法、开发工具、块和内联、常用选择器、后代元素选择器、伪类、伪元素。
- 你再这样提问,就没人愿意回答你了
- 写给陈羡
- angular2内置管道
- 尖子生的启示(3)
- 写给我20岁时爱过的那个男孩