SpringBoot自动配置排除的五种方式

 更新时间:2026年04月15日 09:41:57   作者:希望永不加班  
本文详细介绍了SpringBoot自动配置排除的核心知识点,包括自动配置的基本逻辑、为何需要排除自动配置、五种排除自动配置的方式,需要的朋友可以参考下

本文聚焦 SpringBoot 自动配置排除的核心知识点,涵盖基础认知、5种实战排除方式、高频场景、排错技巧及面试考点,精简冗余内容,保留实战与面试核心,复制可用、易懂好记。

一、自动配置核心逻辑

1. 自动配置本质

SpringBoot “开箱即用” 依赖自动配置:引入 Starter 依赖(如 web、redis),启动时自动加载对应配置类、创建 Bean,无需手动配置。核心载体是 spring-boot-autoconfigure 依赖中的自动配置类(如RedisAutoConfiguration)。

2. 自动配置触发条件

1. 依赖存在:对应 Starter 或自动配置类所在 jar 包已加载;

2. 条件匹配:自动配置类上的 @Conditional 系列注解(如 @ConditionalOnClass)匹配成功。

3. 为什么需要排除自动配置?

依赖传递导致多余加载、自定义 Bean 冲突、多环境轻量化启动、第三方 Starter 冲突、自定义 Starter 开发,避免项目启动报错、资源浪费。

二、5种排除自动配置方式

方式1:@SpringBootApplication(exclude)

直接在启动类注解中指定排除的自动配置类(Class 对象),适合固定排除少量配置。

@SpringBootApplication(exclude = {
        DataSourceAutoConfiguration.class, // 排除数据源配置
        RedisAutoConfiguration.class      // 排除Redis配置
})
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

注意:全局生效,需确保配置类可导入,不支持多环境。

方式2:@SpringBootApplication(excludeName)

用全类名字符串指定排除类,适配包权限限制、版本变更过渡场景。

@SpringBootApplication(excludeName = {
        "org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration"
})
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

注意:全类名需拼写正确,不推荐常规使用。

方式3:配置文件排除

通过 yml/properties 配置,支持多环境动态切换,无需修改代码,微服务首选。

# application.yml(推荐)
spring:
  autoconfigure:
    exclude:
      - org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration
      - org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration

多环境配置:分别在 application-dev.yml、application-prod.yml 中配置,启动时指定环境(--spring.profiles.active=dev)。

方式4:@EnableAutoConfiguration(exclude)

@SpringBootApplication 底层注解,适合非标准启动类、自定义配置扩展。

@Configuration
@ComponentScan(basePackages = "com.example.demo")
@EnableAutoConfiguration(exclude = DataSourceAutoConfiguration.class)
public class MyConfig {
    // 自定义Bean配置
}

方式5:autoconfigure.exclude 文件

SpringBoot 2.0+ 支持,全局统一排除,适合自定义 Starter、多模块统一配置。

操作:resources/META-INF/spring/ 下创建 autoconfigure.exclude 文件,一行一个全类名。

org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration
org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration

三、5种方式对比

排除方式优先级核心优点适用场景
@SpringBootApplication(exclude)最高简单直观、精准普通项目、固定排除
@SpringBootApplication(excludeName)最高无需导入Class无法导入Class场景
配置文件排除支持多环境、灵活微服务、多环境
@EnableAutoConfiguration(exclude)最高底层扩展非标准启动类
autoconfigure.exclude 文件最低全局统一自定义Starter

四、实战排除清单

1. 非Web服务(排除Tomcat)

@SpringBootApplication(exclude = {
        ServletWebServerFactoryAutoConfiguration.class,
        WebMvcAutoConfiguration.class
})

2. 排除数据库配置(解决数据源报错)

@SpringBootApplication(exclude = {
        DataSourceAutoConfiguration.class,
        DataSourceTransactionManagerAutoConfiguration.class
})

3. 排除Redis配置(自定义RedisTemplate)

@SpringBootApplication(exclude = {
        RedisAutoConfiguration.class,
        RedisRepositoriesAutoConfiguration.class
})

五、常见问题

1. 排除失败

原因:全类名拼写错误、排除类不正确、依赖传递、优先级问题;
技巧:添加 debug=true 查看自动配置报告,核对全类名和依赖树。

2. 配置文件排除不生效

原因:路径/文件名错误、未指定环境、注解覆盖;
技巧:确认配置文件加载日志,去掉注解排除测试。

3. 排除后Bean不存在报错

原因:排除了依赖Bean的自动配置类;
技巧:保留必要配置类或删除依赖该Bean的代码。

总结

SpringBoot 自动配置排除,看似简单,却是解决项目启动报错、避免Bean冲突的核心技巧,也是面试高频考点。

其实不用死记硬背,记住两个核心场景就够:普通项目用 @SpringBootApplication(exclude),微服务多环境用配置文件排除,剩下的场景按需选择即可。

以上就是SpringBoot自动配置排除的五种方式的详细内容,更多关于SpringBoot自动配置排除的资料请关注脚本之家其它相关文章!

相关文章

  • Java实现简单文字验证码以及人机验证

    Java实现简单文字验证码以及人机验证

    人机验证技术的发展也在不断进化,从最初的简单验证码到现在的人工智能驱动的高级验证系统,下面这篇文章主要介绍了Java实现简单文字验证码以及人机验证的相关资料,需要的朋友可以参考下
    2025-04-04
  • Java设计模式之策略模式解析

    Java设计模式之策略模式解析

    这篇文章主要介绍了Java设计模式之策略模式解析,在策略模式中,一个类的行为或其算法可以在运行时更改,这种类型的设计模式属于行为型模式,需要的朋友可以参考下
    2023-10-10
  • Java中优先队列PriorityQueue常用方法示例

    Java中优先队列PriorityQueue常用方法示例

    这篇文章主要介绍了Java中优先队列PriorityQueue常用方法示例,PriorityQueue是一种特殊的队列,满足队列的“队尾进、队头出”条件,但是每次插入或删除元素后,都对队列进行调整,使得队列始终构成最小堆(或最大堆),需要的朋友可以参考下
    2023-09-09
  • kibana中ES修改某个字段类型问题小结

    kibana中ES修改某个字段类型问题小结

    这篇文章主要介绍了kibana中ES修改某个字段类型问题,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-06-06
  • Spring单数据源的配置详解

    Spring单数据源的配置详解

    spring数据源的配置网络上有很多例子,这里我也来介绍一下单数据源配置的例子,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-08-08
  • Java序列化与反序列化

    Java序列化与反序列化

    这篇文章主要介绍了Java的序列化与反序列化,序列化把一个对象Java Object变为一个二进制字节序列byte[];反序列化就是把一个二进制字节序列byte[]变为Java对象Java Object。感兴趣的小伙伴可以参考阅读
    2023-04-04
  • Springboot+TCP监听服务器搭建过程图解

    Springboot+TCP监听服务器搭建过程图解

    这篇文章主要介绍了Springboot+TCP监听服务器搭建过程,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-10-10
  • Java中JVM的双亲委派、内存溢出、垃圾回收和调优详解

    Java中JVM的双亲委派、内存溢出、垃圾回收和调优详解

    这篇文章主要介绍了Java中JVM的双亲委派、内存溢出、垃圾回收和调优详解,类加载器是Java虚拟机(JVM)的一个重要组成部分,它的主要作用是将类的字节码加载到内存中,并生成对应的Class对象,需要的朋友可以参考下
    2023-07-07
  • SpringBoot项目微信云托管入门部署实践

    SpringBoot项目微信云托管入门部署实践

    本文主要介绍了SpringBoot项目微信云托管入门部署实践,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03
  • Java中的System.getProperty()详解

    Java中的System.getProperty()详解

    System.getProperty("XXX")方法用来读取JVM中的系统属性,那么java 虚拟机中的系统属性使用在运行java程序的时候java -D配置,有两种方式,一种是在命令行配置另一种是在IDE中配置,本文给大家介绍的非常详细,感兴趣的朋友一起看看吧
    2023-09-09

最新评论