问题描述:
在springboot项目中使用@Value(“${配置项名}”)注解获取apollo非application命名空间配置项,启动时报获取不到配置项错误
···
Caused by: java.lang.IllegalArgumentException:Could not resolve placeholder ‘xxx’ in value “${xxx}”
问题原因
spring项目启动时会将配置文件加载到spring容器里作为项目启动的参数,而在启动时只会读取指定的配置文件,在配置文件中开其apollo支持后,启动类上的@EnableApolloConfig注解默认只加载application命名空间中的配置作为项目启动配置参数,而value注解中的参数注入也是在启动时完成的,这时其他命名空间中的配置还未被读取,因此获取不到
解决方案
注释掉@EnableApolloConfig注解即可
衍生问题
- 加载一次后,重新启动时添加@EnableApolloConfig可以正常启动了,不清楚为什么,待解决
- 经尝试,能获取到apollo中所有命名空间配置后,无法再获取本地application配置属性,暂不清楚什么原因,猜想是启动配置文件只能有一个,而apollo中的一个集群的所有命名空间可以看为一整个启动配置文件