升级springboot3之自动配置导入失效问题及解决
更新时间:2024年07月13日 14:37:41 作者:喜欢读源码的小白
这篇文章主要介绍了升级springboot3之自动配置导入失效问题及解决,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
升级springboot3之自动配置导入失效
解决办法 (主动扫描加载META-INF/spring.factories下的自动配置类)
①.创建一个类实现DeferredImportSelector和BeanClassLoaderAware类
public class EnableAutoConfigurationImportSelector implements DeferredImportSelector, BeanClassLoaderAware {
private ClassLoader classLoader;
@Override
public String[] selectImports(AnnotationMetadata importingClassMetadata) {
List<String> configurations = SpringFactoriesLoader.loadFactoryNames(EnableAutoConfiguration.class, classLoader);
if (configurations.size() != 0){
return StringUtils.toStringArray(configurations);
}
return new String[0];
}
@Override
public void setBeanClassLoader(ClassLoader classLoader) {
this.classLoader = classLoader;
}② 在启动类加上import注解
@EnableDiscoveryClient
@SpringBootApplication
//导入刚刚创建的类
@Import(value = EnableAutoConfigurationImportSelector.class)
public class Java17DemoApplication {
public static void main(String[] args) {
SpringApplication.run(Java17DemoApplication.class, args);
}
}导致问题的原因
spring2 和 spring3的spi扫描路径不一致
- springboot2扫描的是META-INF/spring.factories文件
- springboot3扫描的是META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.import

这是springboot2的扫描路径

这是升级到了springboot3时 扫描的文件路径
所以 升级到springboot3时 因为没有META-INF/spring.factories了 所以这个文件下的自动配置类就没有加载到ioc容器中
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
解决mybatis一对多查询resultMap只返回了一条记录问题
小编接到领导一个任务需求,需要用到使用resultMap相关知识,在这小编记录下这个问题的解决方法,对mybatis一对多查询resultMap项目知识感兴趣的朋友一起看看吧2021-11-11
springboot + elasticsearch 实现聚合查询的详细代码
文章介绍了如何在Spring Boot 2.2.6中使用Elasticsearch进行聚合查询,重点在于通过API创建索引和映射,而不是使用Spring Data Elasticsearch的自动创建功能,文章还提到在创建映射时,Elasticsearch会自动为keyword类型添加keyword属性,感兴趣的朋友一起看看吧2025-02-02
Spring Cloud Gateway编码实现任意地址跳转
这篇文章主要介绍了Spring Cloud Gateway编码实现任意地址跳转的相关资料,需要的朋友可以参考下2023-06-06


最新评论