小伙伴们都知道,在 Spring Boot 中,配置文件是 application.properties 或者 application.yaml,这个名为 application 的配置文件,无论是 properties 格式还是 yaml 格式,都会被 Spring Boot 容器自动加载。
然而很多时候我们会有一些额外的配置,这些额外的配置可能并非系统配置,所以我们不想将之放在 application.properties 或者 application.yaml 中,想搞一个单独的配置文件来处理,这时候就分情况了。
1. properties
对于 properties 格式的配置文件,我们可以随心所欲的自定义配置文件,例如在 resources 目录下新建一个 data.properties 的配置文件用来配置数据库的信息,像下面这样:
db.username=root
db.password=123
db.url=jdbc:mysql:///vhr
然后在 Java 代码中,利用 @PropertySource 和 @ConfigurationProperties 两个注解来加载配置文件:
@PropertySource("classpath:data.properties")
@ConfigurationProperties(prefix = "db")
public class DbProperties {
private String username;
private String password;
private String url;
//省略 getter/setter
}
@PropertySource 就是用来加载一个自定义的 properties 配置文件,这是 Spring 中就有的功能,而不是 Spring Boot 的功能。
所以,如果你使用了 properties 格式的配置文件,那么就可以非常方便的实现自定义配置文件了,甚至可以将不同的配置文件分门别类,管理的井井有条。
问题实际上是出在 yaml 这一块。
2. YAML
小伙伴们知道,对于 YAML 格式的配置而言,它其实是没有一个类似于 @PropertySource 注解的东西的,也就是说 YAML 配置,你只能写在 application.yaml 中,不能写在其他地方。要是写在其他地方,就没法加载了,其实也不是没法加载,可以自己调用 snakeyaml 包中的类去加载,但是那样太费事了,所以我们期望能够有一个简便的办法来做这件事。
怎么做呢?
我们可以利用 Spring Boot 中对于 profile 多环境的处理方式来加载自定义的 YAML 配置。
大家知道,Spring Boot 中对于多环境的处理方式非常方便,以 yaml 配置为例,我们只需要定义一个名为 application-{profile}.yaml 的配置文件,然后在 application.yaml 中就可以指定这个环境了,利用这个漏洞,就可以非常方便的加载自定义的 yaml 配置了,不过这种方式对自定义的 yaml 配置文件名格式有要求,就是必须是 application-{profile}.yaml 格式的。
我举一个简单例子吧,例如对于数据库的配置,我想单独搞一个配置文件,那么我们可以新建一个 application-data.yaml 的配置文件,内容如下:
spring:
datasource:
password: 123
username: root
url: jdbc:mysql:///vhr
然后在 application.yaml 中就像设置环境一样引入这个配置文件,如下:
spring:
profiles:
active: data
这样就实现了对自定义 yaml 配置文件的加载。
如果有多个自定义的 yaml 配置,那么也可以一起加载,多个环境之间用 , 隔开即可。
just this。
小伙伴们都知道吧嘿嘿。