说一个大家都知道的 Spring Boot 小技巧

小伙伴们都知道,在 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。

小伙伴们都知道吧嘿嘿。

 
友情链接
鄂ICP备19019357号-22