社区编辑申请
注册/登录
说一个大家都知道的 Spring Boot 小技巧
数据库 其他数据库
在 Spring Boot 中,我们不想将配置文件放在 application.properties 或者 application.yaml 中,想搞一个单独的配置文件来处理,这时候就分情况了。

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

小伙伴们都知道吧嘿嘿。

责任编辑:赵宁宁 来源: 江南一点雨
相关推荐

2022-04-11 11:38:44

Python代码游戏

2022-04-28 08:05:05

2022-04-30 08:43:52

Spring模块化框架

2022-05-16 13:37:12

Sysrv僵尸网络微软

2022-03-18 09:00:00

开发Web服务应用程序

2022-04-26 08:41:54

JDK动态代理方法

2022-05-17 16:56:33

开发工具前端

2022-03-07 10:26:25

开源springboot项目

2022-05-24 07:51:05

测试模型测试单元测试

2022-04-06 13:55:22

DockerLinux

2022-03-23 12:45:12

JWT登录认证

2022-04-11 07:34:46

OAuth2UAA节点

2022-05-12 07:37:51

单点登录微服务开源

2022-04-13 08:00:00

Hilla开发Java

2022-04-06 08:29:26

Kafka通信中间件

2022-05-07 15:31:19

物联网5G智慧城市

2022-04-29 09:10:25

MobaXterm软件Linux

2022-04-26 05:49:45

物联网OTIT

2022-05-20 08:55:02

py文件exepython

2022-03-31 07:52:01

Java多线程并发

同话题下的热门内容

Abase2:字节跳动新一代高可用 NoSQL 数据库金融业分布式数据库选型及HTAP场景实践谈谈对 Database Plus 认识与畅想再有人问你什么是分库分表,直接把这篇文章发给他​基于智能数据库的自助式机器学习Flink SQL 知其所以然:SQL DDL!每个后端都应该知道的八个提升 SQL 性能的 Tips

编辑推荐

几款开源的图形化Redis客户端管理软件推荐NoSQL数据库概览及其与SQL语法的比较为什么MongoDB敢说“做以前你从未能做的事”Python操作MongoDB看这一篇就够了一文看懂分布式数据库原理和 PostgreSQL 分布式架构
我收藏的内容
点赞
收藏

51CTO技术栈公众号