Spring Boot 2 多模块项目中配置文件的加载顺序
Spring Boot 2 多模块项目中配置文件的加载顺序
在 Spring Boot 2 多模块项目中,配置文件的加载遵循特定的顺序规则。了解这些规则对于正确管理多模块应用的配置至关重要。
一、默认配置文件加载顺序
Spring Boot 会按照以下顺序加载 application.properties
或 application.yml
文件:
-
当前模块的
config
目录 (位于 classpath 根目录下)classpath:/config/application.properties
classpath:/config/application.yml
-
当前模块的根目录
classpath:/application.properties
classpath:/application.yml
-
父模块的
config
目录 (如果存在依赖关系)classpath:/../config/application.properties
(相对路径)classpath:/../config/application.yml
-
父模块的根目录
classpath:/../application.properties
classpath:/../application.yml
二、多模块项目中的特殊加载规则
1. 模块间配置继承
- 子模块会自动继承父模块的配置
- 子模块的配置会覆盖父模块的同名配置
- 使用
spring.config.import
可以显式导入其他模块的配置
2. Profile 特定的配置
对于 application-{profile}.properties/yml
文件:
- 加载顺序与主配置文件相同
- Profile 配置会覆盖主配置
3. 外部化配置加载顺序
除了 classpath 内的配置,Spring Boot 还会按以下顺序加载外部配置:
- 当前目录的
/config
子目录 - 当前目录
- classpath 的
/config
包 - classpath 根目录
三、多模块配置管理最佳实践
1. 推荐的项目结构
parent-module/
├── common-module/ # 公共模块
│ └── src/main/resources/
│ ├── application.yml # 公共基础配置
│ └── application-{profile}.yml
├── service-module/ # 业务模块
│ └── src/main/resources/
│ ├── application.yml # 模块特有配置
│ └── application-{profile}.yml
└── web-module/ # Web模块└── src/main/resources/├── application.yml└── application-{profile}.yml
2. 配置覆盖示例
父模块 (common) application.yml:
server:port: 8080
spring:datasource:url: jdbc:mysql://localhost:3306/common_db
子模块 (web) application.yml:
server:port: 8081 # 覆盖父模块的端口配置
spring:datasource:url: jdbc:mysql://localhost:3306/web_db # 覆盖数据源配置
3. 显式导入配置
Spring Boot 2.4+ 支持使用 spring.config.import
:
# service-module 的 application.yml
spring:config:import:- classpath:application-common.yml # 导入公共配置- optional:classpath:application-override.yml # 可选导入
四、调试配置加载顺序
1. 查看生效的配置
启动应用时添加参数:
java -jar your-app.jar --debug
或在日志中设置:
logging:level:org.springframework.boot.context.config: TRACE
2. 查看 PropertySources
在应用中注入并输出:
@Autowired
private ConfigurableEnvironment env;@PostConstruct
public void printProperties() {env.getPropertySources().forEach(ps -> {System.out.println("PropertySource: " + ps.getName());});
}
五、常见问题解决方案
1. 配置不生效
- 检查文件位置是否正确
- 确认文件名拼写(注意
application
的全小写) - 检查模块依赖是否正确
2. Profile 配置未加载
- 确保激活了正确的 profile:
java -jar your-app.jar --spring.profiles.active=dev
3. 多模块配置冲突
- 使用前缀区分不同模块的配置:
# common 模块 common:datasource:url: jdbc:mysql://localhost/common# web 模块 web:datasource:url: jdbc:mysql://localhost/web
通过合理组织多模块项目的配置文件,可以确保配置的正确加载和覆盖,同时保持各模块配置的清晰性和可维护性。