【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中的最后一个为准!
相关文章
相关标签/搜索