如何在多模块Spring Boot Gradle项目中统一管理数据库配置属性?
多模块Spring Boot Gradle项目统一数据库配置方案
下面给出三种可落地的实现方案,可根据自身项目场景选择:
方案1:抽取公共配置模块,基于Spring Boot profile继承
- 新增公共基础模块,比如命名为
common-spring-boot-starter,在该模块的src/main/resources路径下新建application-common-db.yml,写入统一的数据库公共配置:
spring: datasource: username: 全局统一用户名 password: 全局统一密码 url: jdbc:mysql://统一数据库地址/默认库?参数配置
- 所有需要用到数据库配置的业务模块,在
build.gradle中引入common-spring-boot-starter的依赖,之后在自身的yml配置中激活公共数据库配置即可:
spring: profiles: include: common-db
该方案的优势是无需改动Gradle配置逻辑,完全基于Spring Boot原生配置规则实现,单个模块如果需要特殊数据库配置,直接在自身yml中重写对应属性即可,优先级高于公共配置。
方案2:基于Gradle资源占位符替换,根项目统一管理配置
- 在根项目的
gradle.properties文件中定义全局数据库属性:
db.common.username=root db.common.password=admin@123 db.common.url=jdbc:mysql://127.0.0.1:3306/test_db?useUnicode=true
- 所有子模块的yml配置中,将数据库属性替换为占位符形式:
spring: datasource: username: @db.common.username@ password: @db.common.password@ url: @db.common.url@
- 在根项目的
build.gradle中统一配置子模块的资源过滤规则,避免每个子模块重复配置:
subprojects { processResources { filesMatching("application*.yml") { expand(project.properties) } } }
该方案的优势是配置完全在Gradle层面处理,编译时就会把占位符替换成对应值,支持配合不同环境的Gradle profile实现多环境配置一键切换。
方案3:外部化配置,启动时统一指定
如果是部署阶段需要频繁切换数据库,可直接移除所有子模块中的数据库配置,启动时统一指定:
- 方式1:通过启动参数传值
java -jar 业务模块.jar --spring.datasource.username=xxx --spring.datasource.password=xxx --spring.datasource.url=xxx - 方式2:引用外部统一配置文件
java -jar 业务模块.jar --spring.config.location=/data/config/external-db.yml
该方案无需修改项目代码和配置,适合运维层面动态调整配置的场景。
内容的提问来源于stack exchange,提问作者EvgenyT
相关产品推荐
相关产品推荐

