记录贴,由于一个项目中有用到大量的定义好的配置,可能会更改,于是想抽取到配置文件中,搜索良久,总算找到了一个相对满意的方法
前言
实现自定义配置文件的方法有那么几种:
- 利用@PropertySource注解来实现
需要写java bean,而且配置文件添加或者修改,也需要改,不方便
- 使用EnvironmentPostProcessor加载自定义配置文件
需要实现接口继承类,对于yml支持不好
以上两种方法参考此处
个人觉得,可以采用第三种方法,在application.yml配置,主要用到了spring.profile.include 或 spring.profile.active方法。
优点:很方便,就和直接在application.yml中一样。
缺点:配置名字无法自定义(只能是application-${filename} 但我觉得无伤大雅,本来Spring Boot就是约定大于配置,能自定义一部分名称,相信能满足大部分人的需求了)
首先要理解spring.profile.include 或 spring.profile.active
spring.profile.active:
根据部署场景不同,切换不同的配置文件:配置spring.profiles.active,属性值为${profile}。
spring.profile.include:
启用开发环境(主)配置文件时active时,同时启用spring.profiles.include属性配置其他的profile
active 我们常用来指定开发环境如:dev、test、prod等,因此我们只需要生效的配置下,指定include即可。
也就是如果在application-dev.yml下置顶的配置文件只会在dev下生效,重点来了application.yml的文件则会全局生效,所以我们可以采用这个特性,实现我们的诉求。
可惜没有轮子能够实现无论配置文件啥名字都能读取,以后要是有能力可以看看能不能实现下。
🌰例子如下
- application.yml 指定文件
- 配置文件位置及内容
- 读取测试
@Value("${qq.test}")
private String test;
@Value("${home.test}")
private String home;
@GetMapping()
public String loginUser() {
return test +"------------" + home;
}
完美!