[Spring]属性加载优先级
Spring中,XML配置文件里面,各个属性源的加载顺序有一定先后顺序。
我们在使用spring时,一些参数配置通常不会直接写在spring的bean的XML配置文件里面。在我们使用${参数名},时,如果系统环境变量中有同名的name时,可能会被Spring优先使用。
比如Windows,系统环境变量中通常会有USERNAME,如果我们在给数据库驱动配置相关参数时,把数据库的用户名变量的变量名定义成 username ,会导致其被系统环境变量覆盖:
我们写一个测试类,通过断点查看我们插入进去的值:
可以看到我们的数据库用户名没有被正确赋值。最直接的解决方法更改properties文件中的变量名,其他方法在本文后面讲解。
属性加载优先级
1.命令行参数,比如–server.port=8080。
2.JVM系统属性。
3.系统环境属性。
4.其他通过<context>系列标签引入的自定义配置文件(例如.properties和yml,而其中properties又先于yml)
4.通过@Configuration注解类上的@PropertySource注解引入的配置文件