springboot 读取依赖模块的yml配置
in 默认分类 with 0 comment 75 views

springboot 读取依赖模块的yml配置

in 默认分类 with 0 comment 75 views

背景

搭建springcloud项目,抽出了个公共的common模块,其他服务依赖于common模块。

我搭springboot项目一般习惯分application.ymlapplication-dev.ymlapplication-prod.yml三个配置文件,application.yml为主配置文件,通过spring.profiles.active属性指定其他配置文件,开发时指定为dev环境,线上指定为prod,方便切换。

问题

由于我将数据库信息配置在了common模块,同样的建立了这三个配置文件。现在需要开发用户user模块,引入了common模块,发现不会读取common模块的这三个配置文件,连不上数据库。

原因

springboot如果自己有application.yml,就会覆盖依赖模块的同名配置文件。spring.profiles.active也是,先到自身resource目录下找,如果找不到再去依赖模块找。

例如我在user模块建了application.yml,common模块的application.yml就不会读取。

在user模块application.yml配置了spring.profiles.active: dev,但因为user模块本身也有application-dev.yml这个文件,所以不会再去读取common的application-dev.yml配置。

方法1

将common模块的配置文件名称改掉,例如改成application-common.yml,然后在user模块用spring.profiles.active: dev,common同时引入。

因为user模块没有application-common.yml,就会去common模块找。

缺点:这种方法如果不小心起重名了,则会整个覆盖,而不是作为补充。并且在切换线上线下环境时也不方便。

方法2

在common模块的resource文件夹下创建个config文件夹,把配置文件移入。官方文档也是推荐这种方法。

这种方法若user模块和common模块的配置文件同时存在,会优先用user模块的配置,common模块的配置会作为补充。

Responses