赞
踩
我这自定义了一堆starter,然后打包成jar,在主程序里引入进来,启动就报错,只有是引入自定义starter里的bean就会报找不到该bean,也就是没有被spirng扫描到,搜索如下关键字:
spring boot自动装配注入失败,spring boot自定义starter没有初始化,spring boot自动装配无效,没有执行
网上找了一圈,无果,基本上都是说启动类所在包引起啥的,在@SpringBootApplication注解里添加scanBasePackages指定包名:
@SpringBootApplication(scanBasePackages = "com.aaa.bbb")
我这启动类本身就放在aaa包下,根本就不存在该问题,在网上看了一圈,没找到有啥价值的答案,目前确定的是,这个问题肯定是自动装配引起的,没有初始化,然后又去搜了下,自动装配的原理,看了下,然后通过Debug的方式找到了问题所在,在org.springframework.boot.autoconfigure.AutoConfigurationImportSelector#getCandidateConfigurations方法里找到了答案
在断言中提示:
No auto configuration classes found in META-INF/spring.factories. If you
然后突然想起,我这是spring boot程序,打出来的jar包和普通的jar包是有区别的,加入以下依赖
<plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <fork>true</fork> <mainClass>com.xxxx.xxxx</mainClass> </configuration> <executions> <execution> <goals> <goal>repackage</goal> </goals> </execution> </executions> </plugin>
重新编译以下,就可以了。
如果你你不确定是不是自动装配的原因,可以在启动类上通过@Import的方式将starter注册的配置导入到主程序里来,看是否还提示注入失败。
@Import({xAutoConfiguration.class, xxxxAutoConfiguration.class})
其实还可以,直接将spring的日志级别设置为debug,通过跟踪日志确认问题,就是有日志很多有点乱。
2021-1-15更新:
今天下午,又出现自动装配失效了,搞了我半天,跟踪源码调来调去的,就是不加载自动装配,在打出的jar包的lib目录下明明就是有该jar,就是不加载,在org.springframework.boot.autoconfigure.AutoConfigurationImportSelector#getCandidateConfigurations方法的configurations变量,始终就是没有该jar中的自动装配类,其他的有,就是该jar没有
打出的可执行jar没问题,通过命令的方式可以执行,但是在IDEA里就是不行,提示该jar里的某个bean没有注入,首先确实在依赖里是否存在该jar
没有的话,添加,我这是有,排除,最后在idea的第一行日志里发现了问题,IDEA启动的时候,会自己指定一个classpath
将该项目所有依赖全部加到该下面
我缺的那个jar刚好就没在这里,所以就是不行,加载不进来,我将IDEA清除缓存,重启发现还是不行,最后发现重新构建下就好。。。醉了醉了
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。