spring boot自动装配注入失败,spring boot自定义starter没有初始化,spring boot自动装配无效,没有执行

一、问题描述

我这自定义了一堆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清除缓存,重启发现还是不行,最后发现重新构建下就好。。。醉了醉了

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/mashangzhifu/article/details/122462361
今日推荐