升级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容器中

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • java 读写Parquet格式的数据的示例代码

    java 读写Parquet格式的数据的示例代码

    本篇文章主要介绍了java 读写Parquet格式的数据的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-09-09
  • 使用java基础类实现zip压缩和zip解压工具类分享

    使用java基础类实现zip压缩和zip解压工具类分享

    使用java基础类写的一个简单的zip压缩解压工具类,实现了指定目录压缩到和该目录同名的zip文件和将zip文件解压到指定的目录的功能
    2014-03-03
  • 解决mybatis一对多查询resultMap只返回了一条记录问题

    解决mybatis一对多查询resultMap只返回了一条记录问题

    小编接到领导一个任务需求,需要用到使用resultMap相关知识,在这小编记录下这个问题的解决方法,对mybatis一对多查询resultMap项目知识感兴趣的朋友一起看看吧
    2021-11-11
  • springboot + elasticsearch 实现聚合查询的详细代码

    springboot + elasticsearch 实现聚合查询的详细代码

    文章介绍了如何在Spring Boot 2.2.6中使用Elasticsearch进行聚合查询,重点在于通过API创建索引和映射,而不是使用Spring Data Elasticsearch的自动创建功能,文章还提到在创建映射时,Elasticsearch会自动为keyword类型添加keyword属性,感兴趣的朋友一起看看吧
    2025-02-02
  • Spring Cloud Gateway编码实现任意地址跳转

    Spring Cloud Gateway编码实现任意地址跳转

    这篇文章主要介绍了Spring Cloud Gateway编码实现任意地址跳转的相关资料,需要的朋友可以参考下
    2023-06-06
  • java面向对象继承与多态介绍

    java面向对象继承与多态介绍

    大家好,本篇文章主要讲的是java面向对象继承与多态介绍,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下
    2022-01-01
  • SpringBoot详解shiro过滤器与权限控制

    SpringBoot详解shiro过滤器与权限控制

    当shiro被运用到web项目时,shiro会自动创建一些默认的过滤器对客户端请求进行过滤。比如身份验证、授权的相关的,这篇文章主要介绍了shiro过滤器与权限控制
    2022-07-07
  • Ehcache简介_动力节点Java学院整理

    Ehcache简介_动力节点Java学院整理

    这篇文章主要介绍了Ehcache简介,使用Spring的AOP进行整合,可以灵活的对方法的返回结果对象进行缓存
    2017-07-07
  • Java中LocalDateTime的具体用法

    Java中LocalDateTime的具体用法

    本文主要介绍了Java中LocalDateTime的具体用法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-01-01
  • netty中pipeline异常事件分析

    netty中pipeline异常事件分析

    这篇文章主要为大家介绍了netty中pipeline异常事件分析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-04-04

最新评论