Maven 多模块配置文件依赖问题
Wenhao Wang 2020-07-24 Spring BootMaven
Maven 多模块情况下,配置文件的加载规则和配置规则
在微服务项目中或者 Spring Boot 的多模块项目中,往往需要将公共的部分抽离到单独的模块中,供其他模块引用,例如 common 模块,此时,common 模块下 resource 目录下的配置文件的读取规则遵循以下逻辑:
配置文件优先级
file:./config/ - 优先级最高(项目根路径下的config) file:./ - 优先级第二 -(项目根路径下) classpath:/config/ - 优先级第三(项目resources/config下) classpath:/ - 优先级第四(项目resources根目录) project-sample ├── config ├── application.yml (1) ├── application.yml (2) └── src/main/resources └── config | ├── application.yml (3) ├── application.yml (4)
1
2
3
4
5
6
7
8
9
10
11
12
13以上位置的 application.yml 和 application.properties 遵循以下规则
properties
优先级高于yml
高优先级配置会覆盖低优先级配置
多个配置文件互补
比如,两个同名文件中有相同的配置,相同的配置会被高优先级的配置覆盖,其余配置互补
1
当模块 A 依赖 common 模块时,模块 A 中会**==忽略==** common **==同位置且同名==**的配置文件,例如:
模块A resource 下有 application.yml 文件 common resource 下有 application.yml 文件 此时 common 模块下的配置文件不会被加载,会被完全丢弃
1
2
3
4配置文件忽略规则
规则1: common 模块下的 application.yml 会被丢弃 模块A resource 下有 application.yml 文件 common resource 下有 application.yml 文件 规则2: common 模块下的 application.yml 会被正常加载 模块A resource 下有 application.properties 文件 common resource 下有 application.yml 文件 规则3:common 模块下的 application.yml 会被正常加载 模块A resource/config 下有 application.yml 文件 common resource 下有 application.yml 文件
1
2
3
4
5
6
7
8
9
10
11
多模块时,被依赖模块中同位置且同名的配置文件会被忽略,未忽略的配置文件遵循配置文件优先级规则