1事故背景:小编在一家外企上班,最近项目要求升级springboot至3.2,没错就是上星期刚更新的3.2版本,于是就当我正以为切换version就完事的时候报错了(涉密项目无代码展示),如下所示。
Caused by: java.lang.IllegalStateException: @ConditionalOnMissingBean did not specify a bean using type, name or annotation and the attempt to deduce the bean's type failed.......
2过程:刚开始翻阅了spring官方提供的升级3.2的文档Home · spring-projects/spring-boot Wiki · GitHub
其中其实是有不少解决方案的,可根据以上链接自行查询
然后小编就酣畅淋漓地把所有跟依赖注入的解决方案都试过一边了(因为报错的是自动装配的注解),但是也没有什么用。
3重点:然后属实无奈,我就用了一个low的方案。
1)首先报这种框架底层的错误,那必然是跟代码无关,换句话说就是dependency的问题。
2)其次分析了一下既然是新的版本,那必然会抛弃一些旧的jar包依赖,换句话说就是不兼容。
3)答案就是控制变量法,先拉一个新的分支,然后把代码全注释或删了,把pom文件的依赖全注释掉,先让空壳项目跑起来,跑起来之后一个一个解开注释掉的依赖,轮到哪个报错,便是答案所在。
4解决:最终发现项目中spring-web的依赖版本太低导致的,查询资料后发现,springboot3.2默认的spring-web是6.1.0的(公司的是6.0.14),于是在pom文件把它的version改为6.1.1便解决了问题(6.1.0和6.1.1都可以)
文章记录一下解决思路,请大家多多支持小编哈。