平时开发时发现的问题,百度也没找到解决办法,只能先记录下来,后续,如果有了解决办法,再更新。同时,希望某个路过的大神,或者遇到过这个问题,并解决了的,可以指点一下。
背景:开发过程中,存在一些配置项,需要分环境的,本地环境、测试环境、正式环境等等。这些配置的话,按我自己的理解,分为两类,一类是spring自带的配置,比如spring.datasource、spring.redis等等,这一类的,通常是分成多个配置文件编写,最后通过spring.profiles.active来指定。
另一类,就是自定义的配置项,比如,短信服务的秘钥、文件存储服务的地址等等,之前都是在工具类中定义成常量。
然后每次切换环境去测试的时候,都需要改配置,就很烦。于是,想到,用@Value注解去自动注入,问题就产生了,因为使用spring.profiles.active指定配置环境的时候,配置都会随着改,于是理所应当的认为@Value也会随着指定的环境更改。但结果告诉我,并不会,它甚至都不会读取同一个文件中的配置。
问题复现:
application-dev.properties中的内容
application-devonline.properties中的内容
application-pro.properties中的内容
application.properties则选中dev环境
@Value回显,这里可以看到,第一个NFS-IP参数,使用的是pro中的配置项,第二个NFS-DIR参数使用的devonline中的配置。
结论:@Value遇到多个文件中有重复的配置项,只会选择最后一个(虽然我感觉是随机的~~~)。并不会随着spring.profiles.active所选定的配置所变动。百度了一番,也没找到什么解决办法,最终还是只能每次手动去改配置了。。。