问题描述:
大家有没有遇见过这种情况,Java应用程序打包后运行在测试环境时,会发现程序读取配置文件错误,读到的压根不是测试环境配置文件,那么这个时候要注意了,该配置可能未配置在测试环境配置文件中。当程序读取不到测试环境配置文件时,会从程序包中找相同的配置文件获取改配置的值。
原因分析:
SpringApplication从以下位置的application.properties文件加载属性,并将其添加到Spring的Environment中:
- 当前目录的/config子目录
- 当前目录
- classpath下的/config目录
- classpath路径根目录
上面的目录将按优先级排序,若在不同目录下定义了相同的属性怎么办呢,spring采取的方式是让在这些目录中较高位置定义的属性覆盖在较低位置定义的属性。我们也可以自己定制propertie文件的名字,以及它加载属性的位置,spring支持这样的用法,但一般我们使用标准的用法就能满足需求。
解决方案:
在测试环境配置文件中加上该配置,重新运行程序即可读到测试环境下配置文件中的值而不是程序包的值。