关于Could not resolve placeholder 'aliyun.oss.maxSize' in value "${aliyun.oss.maxSize}报错解决方案
事件背景
今天执行mall项目报错
Error creating bean with name 'ossController': Unsatisfied dependency expressed through field 'ossService'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'ossServiceImpl': Injection of autowired dependencies failed; nested exception is java.lang.IllegalArgumentException: Could not resolve placeholder 'aliyun.oss.maxSize' in value "${aliyun.oss.maxSize}"
错误原因
Could not resolve placeholder 'aliyun.oss.maxSize' in value "${aliyun.oss.maxSize}"
,不能注入@Value("${aliyun.oss.maxSize}")
导致'ossService'
bean创建失败,导致'ossController'
bean创建失败
检查项目配置文件/resources/application.yml,没有发现问题
解决方案
对于像我这样的新手小白到这就不知道原因了,上网也找不到解决方案,其实答案很明确,系统提示Error creating bean with name 'ossController'
,首先定位到ossController.java文件,然后一层一层找到位于ossServiceImpl.java层的@Value("${aliyun.oss.maxSize}")
,点击maxSize,发现不能解析,原来是编译错误,到项目./target/classes文件夹下查看application.yml文件
原来错误是因为编译文件格式错误,yml文件严格遵照格式规范,这里value里注入的是aliyun.oss.maxSize,而配置中maxSize多了两个空格,导致格式变为aliyun.oss.policy.maxSize,文件读取不到,导致整个系统报错
删除target文件,重新编译,代码没有错误
分析
上述错误主要原因是对@Value注解理解不到位导致
- @Value的作用是通过注解将常量、配置文件中的值、其他bean的属性值注入到变量中,作为变量的初始值。
- @Value注入的值如果找不到,则会报整个文件的创建失败错误,最终导致程序无法启动
- ./target/classes文件下的文件相当于.java文件编译后生成的.class文件,是jvm虚拟机最终执行的文件,如果.java文件修改不大而编译文件里已经存在同名文件,则该文件极大可能不会重编译,如本文中./target/classes文件下的application.yml文件不知什么时候多加了两行空格,而在修改了./src/main/resoures/application.yml文件重编译后,原来错误的文件没有被覆盖,导致运行错误,这一点新手需要谨记