背景
Springboot 多模块有依赖关系,每个模块又都有几个环境,需要不同的配置环境。实际工程中,我们常常有 web 模块依赖 service 模块,service 模块依赖 dao 模块。
以数据库配置为例,若都把配置文件写在当前启动的模块中,我们就需要在 web 模块中写一遍数据库配置,如果有多个 web 模块就需要写多遍。service 和 dao 要单独启动或本地测试时,还要写配置文件。这样整个工程中就会有很多冗余的配置。
因此,我们需要进行配置文件的依赖处理,使数据库配置只存在于 dao 模块中,上层模块直接调用 dao 模块中的指定环境配置文件。
应用举例
假设
有两个不同的环境:测试环境 test,线上环境 online。
有两个不同的模块:父模块 my-service 是业务服务,子模块 my-dao是数据库操作。
数据库配置在 my-dao 中,my-service 需要根据不同的环境调用 my-dao 中相应的配置文件。
my-service 配置文件结构如下:
my-service
src
main
java
resources
application.properties
application-test.properties
application-online.properties
application.properties 配置文件内容:
指明所使用的具体配置,my-service 选择 test 环境,使用 application-test.properties 配置文件。
spring.profiles.active=test
application-test.properties 配置文件内容:
指明所依赖的 my-dao 中的配置,引入模块 my-dao 中的 test 环境配置。
spring.profiles.include=dao-test
application-online.properties 配置文件内容:
指明所依赖的 my-dao 中的配置,引入模块 my-dao 中的 online 环境配置。
spring.profiles.include=dao-online
my-dao 配置文件结构如下:
my-dao
src
main
java
resources
application.properties // my-dao的公共配置,my-service 调用时不启作用
application-dao-online.properties // 写了数据库层 online 环境数据库配置
application-dao-test.properties // 写了数据库层 test 环境数据库配置
若 my-dao 需要单独启动/本地测试
- my-dao 的中 application.properties 可以写入
spring.profiles.active=dao-test
,指明使用 test 环境。 - 增加 MyDaoApplication.java 如下
@SpringBootApplication
@MapperScan("org.my.dao.mapper")
public class MyDaoApplication {
public static void main(String[] args) {
SpringApplication.run(MyDaoApplication .class, args);
}
}
my-service 模块中的 Application
@EnableTransactionManagement
@SpringBootApplication(scanBasePackages = "org.my")
@MapperScan("org.my.dao.mapper")
public class MyServiceApplication {
public static void main(String[] args) {
SpringApplication.run(MyServiceApplication .class, args);
}
}