一、问题即分析
项目pom文件中的profiles有3个配置:dev
、test
和production
默认配置的是dev
,如下图:
但在本地起服务时,读取的配置始终是test
里的。
二、原因
2.1 maven中的profile说明
开始并不知道原因,因为特别违反常理,pom文件里的配置不生效你敢信...后来发现其实是IDEA的锅。
对于IDEA中Maven的使用需要注意以下内容:
图片内容摘自: https://youmeek.gitbooks.io/intellij-idea-tutorial/content/maven-skill-introduce.html
注意:上面说的profile我们都理解,有多个也理解,但同时激活多个profile是什么鬼?
如果我同时激活两个,而这两个里面对于同一个属性的值配置的并不同,那么Maven或者说IDEA要如何选择?选择哪个?
一看我们的项目,果然是这个原因:同时选中了dev
、test
的配置,但实际生效的是test
,即使我们pom里面配置的默认是dev
...而且,不管我们怎么改dev
,配置始终不生效,因为实际使用的配置是test
2.2 为什么IDEA会同时选中dev
和test
?
因为我们这个项目是一个多模块项目,里面有3个Web,其中一个的默认配置是test,另外两个的默认配置都是 dev。可能因为这样导致同时选中了dev
和test
。
2.3 为什么之前没问题?
因为之前每个项目里的dev
和test
配置都一样,这次上线,因为测试原因,修改了配置,将test
的配置改为了预发的配置。然后本地起服务,读取了预发的配置,就出了问题。
三、解决
上图中的配置,只选中dev
...果然,问题解决了。不能都不选,不然连项目都无法编译...