当前栏目
说一个大家都知道的 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。
小伙伴们都知道吧嘿嘿。
相关文章
- 【前端】重构,有品位的代码 06── 重新组织数据
- NioEventLoop源码解析
- 一篇带你了解io_uring和Node.js
- 前端自动化测试:TDD 和 BDD 哪个好?
- 5 个不常提及的 HTML 技巧
- 一篇文章带你了解JavaScript Object 对象
- 面试官:React构建组件的方式有哪些?区别是什么?
- 前端水印实现方案
- OpenHarmony分布式软总线流程分析v1.0丨1.被发现端,发布服务
- 性能优化竟白屏,难道真是我的锅?
- 面试中关于 JavaScript 作用域的 5 个坑
- 如何在 Swift 中自定义操作符
- 横刀跃马,关于Bean对象作用域以及FactoryBean的实现和使用
- 如何使用 Distroless 让你的容器更加安全
- 从 WiscKey 看 LSMtree 的不足
- 【前端】重构,有品位的代码 05── 搬移特性
- 面试官:React事件绑定的方式有哪些?区别?
- 「Webpack」从0到1学会 Code Splitting
- 一篇文章带你了解抽象泄漏(Leaky Abstractions)
- 前端自动化测试:Vue 应用测试