SpringBoot中@Value注入失败问题解决
1. 第一步检测语法是否正确
@Value("${aes.key}")
private String key;@Value("${aes.secret}")
private String secret;
2.第二步检测配置文件中是否有进行配置
aes:key: xxxxsecret: xxxxxxx
3.第三步检测类是否增加了能被spring管理的注解
在spring中,使用了spring的注解,那么就需要使用spring来进行管理对象,而不能自己进行new,否则就会导致失败。例如类 @Controller @Service @Component 等能被spring管理的注解
4.第四步检测配置yml
若有多个配置必须每个配置中都添加上配置
aes:
key: xxxx
secret: xxxxxxx
5.第五步
若application.yml
和bootStrap.yml
在同一目录下,则bootStrap.yml的加载顺序要高于application.yml,如果当前配置文件名称为application.yml,即使配置文件中存在所使用的属性key,使用@Value注解也会报错,因为在启动项目时@Value只能检索到优先及最高的配置文件,也就是bootStrap.yml
原理:
- bootstrap.yml用于应用程序上下文的引导阶段,由父Spring ApplicationContext加载。bootstrap.yml 可以理解成系统级别的一些参数配置,这些参数一般是不会变动的。
- application.yml可以用来定义应用级别的,如果搭配 spring-cloud-config 使用 application.yml 里面定义的文件可以实现动态替换。