关于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注解理解不到位导致

  1. @Value的作用是通过注解将常量、配置文件中的值、其他bean的属性值注入到变量中,作为变量的初始值。
  2. @Value注入的值如果找不到,则会报整个文件的创建失败错误,最终导致程序无法启动
  3. ./target/classes文件下的文件相当于.java文件编译后生成的.class文件,是jvm虚拟机最终执行的文件,如果.java文件修改不大而编译文件里已经存在同名文件,则该文件极大可能不会重编译,如本文中./target/classes文件下的application.yml文件不知什么时候多加了两行空格,而在修改了./src/main/resoures/application.yml文件重编译后,原来错误的文件没有被覆盖,导致运行错误,这一点新手需要谨记
posted @ 2022-07-22 13:27  简单的二叉树  阅读(893)  评论(0)    收藏  举报