SpringBoot 配置文件优化和管理
配置文件是项目开发必不可少的,但是日常工作中,管理人员和开发人员经常疏于管理,导致项目后期配置文件内容臃肿、混乱。
在实际项目中,配置文件可能会存在几个问题:
- 简单的使用
application-dev.yml
、application-prod.yml
,导致所有配置文件堆积在一个配置文件,内容臃肿,可·读性差
。 - 配置文件内容存在大量的复制粘贴的痕迹。
- 配置文件中,自定义配置信息无任何备注,
可读性极差
。 - 配置文件中,存在大量失效配置信息未清理。
- 配置文件类型混用,例如
application.yml
和application.properties
,对刚入门的同学不友好,项目也显得很混乱。 - 生产环境配置文件放置的路径混乱,
classpath
、同级目录、同级config文件夹混用。
“约定大于配置”(Convention Over Configuration),是一种编程范式,它强调了在软件开发中,通过遵循约定(即预定的规则和惯例)而不是过多的配置,可以提高开发效率和简化开发过程。
但就像数据库设计的三范式
,很少有人为了规则去按规则办事,为了提高sql的执行效率,会在设计中存在一定的冗余。
配置文件也是如此,一般需要团队成员遵循一定的约定,才能尽可能的保证配置文件的可读性,以下一些实践参考。
1. 减少使用 application.profiles
,使用 spring.profiles.active
Spring Boot 2.4 之后为了提升对 K8s的支持, 整个
spring.profiles
已经弃用。
spring.profiles.actvie
使用参考:
spring:
profiles:
active: dev
2. 定制团队配置文件使用约定,并且遵守约定
- 禁止项目之间配置文件 全量、直接复制黏贴。
- 禁止使用
application-dev.yml
这样单一的文件存储所有配置信息,建议文件根据技术选型和相关性,拆分成多个配置文件,使用spring.config.import
引用。 例如:application-rabbitmq.yml
只配置rabbitmq相关的信息。 - 配置文件内容如果失效,那么请在一定的周期内按时删除。
- 配置文件自定义配置信息,
强制
写清楚what ? why ? who ? 也就是用来做什么,给谁用,谁来管理这个配置。 - 不建议
.yml
和.properties
文件混用 - 建议测试环境项目
自动化部署
- 建议生产环境统一配置文件放置路径,禁止混用。
备注: 自动化部署 可以使用 Alibaba cloud toolkit
、Ansible
等,建议熟悉、统一使用一个就好。如何使用Alibaba cloud toolkit完成项目自动部署和运行
3. 使用 spring.config.import
引用多个配置文件
spring.config.import 是Spring Boot中的另一个配置项,用于导入外部配置文件。你可以在 application.properties 或 application.yml 文件中使用该属性,指定要导入的外部配置文件的路径。
application.yml
例如:
spring:
config:
import: application-web.yml,application-config.yml,application-mysql.yml,application-email.yml,application-rabbitmq.yml
备注:
配置文件拆分后会引发一个问题:实际开发还是会区分开发、测试、灰度、生产等不同的环境,但是打包时只需要一类(例如开发环境)配置文件,如何解决呢?
参考答案是:使用项目合理的目录 和 Maven 配置进行打包。