升级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中通用SQL写法的几种方法实现

    MyBatis中通用SQL写法的几种方法实现

    本文介绍了MyBatis中常见的几种通用SQL写法,包括批量操作、动态SQL、多条件分支查询、SQL语句优化、自动生成主键、注解方式以及高级映射等,感兴趣的可以了解一下
    2024-12-12
  • JavaScript中栈和队列应用详情

    JavaScript中栈和队列应用详情

    这篇文章主要介绍了JavaScript中栈和队列应用详情,栈如果用数组模拟的话是类似于一个U形桶状堆栈空间,文章围绕制图展开详细的内容展开更多相关内容,需要的小伙伴可以参考一下
    2022-06-06
  • 浅谈Spring中@Import注解的作用和使用

    浅谈Spring中@Import注解的作用和使用

    这篇文章主要介绍了浅谈Spring中@Import注解的作用和使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-05-05
  • HttpClient实现调用外部项目接口工具类的示例

    HttpClient实现调用外部项目接口工具类的示例

    下面小编就为大家带来一篇HttpClient实现调用外部项目接口工具类的示例。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-10-10
  • Spring Boot集成MyBatis-Plus 自定义拦截器实现动态表名切换功能

    Spring Boot集成MyBatis-Plus 自定义拦截器实现动态表名切换功能

    本文介绍了如何在SpringBoot项目中集成MyBatis-Plus,并通过自定义拦截器实现动态表名切换,此外,还探讨了MyBatis拦截器在其他场景中的应用,如SQL日志记录、多租户数据隔离、数据权限控制等,感兴趣的朋友跟随小编一起看看吧
    2024-11-11
  • Java并发编程必备之Future机制

    Java并发编程必备之Future机制

    今天给大家带来的是关于Java并发编程的相关知识,文章围绕着Java Future机制展开,文中有非常详细的介绍及代码示例,需要的朋友可以参考下
    2021-06-06
  • SpringBoot项目中的视图解析器问题(两种)

    SpringBoot项目中的视图解析器问题(两种)

    SpringBoot官网推荐使用HTML视图解析器,但是根据个人的具体业务也有可能使用到JSP视图解析器,所以本文介绍了两种视图解析器,感兴趣的可以了解下
    2020-06-06
  • Java synchronized轻量级锁的核心原理详解

    Java synchronized轻量级锁的核心原理详解

    这篇文章主要为大家详细介绍了Java synchronized轻量级锁的核心原理,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-03-03
  • Java简单工厂和工厂方法模式详细解析

    Java简单工厂和工厂方法模式详细解析

    这篇文章主要介绍了Java简单工厂和工厂方法模式详细解析,简单工厂模式属于类的创新型模式,又叫静态工厂方法模式是通过专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类,需要的朋友可以参考下
    2023-12-12
  • SpringBoot项目集成Flyway进行数据库版本控制的详细教程

    SpringBoot项目集成Flyway进行数据库版本控制的详细教程

    这篇文章主要介绍了SpringBoot项目集成Flyway进行数据库版本控制,本文分步骤通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-07-07

最新评论