搭建springcloud项目,抽出了个公共的common模块,其他服务依赖于common模块。
我搭springboot项目一般习惯分application.yml
、application-dev.yml
、application-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模块的配置会作为补充。
本文由 visionki 创作,采用 知识共享署名4.0 国际许可协议进行许可
本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名
最后编辑时间为: Mar 17, 2021 at 07:48 am