spring boot 关闭特定自动配置类的核心是在加载前排除,通过 @springbootapplication 的 exclude(类型安全)、excludename(字符串形式)、application.yml/.properties 配置或 @enableautoconfiguration 注解实现。

Spring Boot 关闭特定自动配置类,核心是“在加载前排除”,不是运行时停用或销毁 Bean。它发生在 AutoConfigurationImportSelector 解析阶段,直接从候选列表中移除目标类,使其完全不参与条件判断、Bean 创建和依赖注入。
用 @SpringBootApplication 的 exclude 属性(推荐)
这是最常用、类型安全的方式,适合启动类明确且自动配置类在当前 classpath 中可访问的场景:
- 排除单个:
@SpringBootApplication(exclude = DataSourceAutoConfiguration.class) - 排除多个:
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class, MailSenderAutoConfiguration.class}) - 注意:必须传入自动配置类本身(如
DataSourceAutoConfiguration),不能传它生成的 Bean 类型(如DataSource) - IDE 可自动补全、编译期校验,不易拼错
用 excludeName 指定全限定类名(应对类不可见)
当目标自动配置类不在当前模块 classpath(例如由插件引入、模块隔离、或版本升级导致类路径变更)时,无法 import 类,此时改用字符串形式:
@SpringBootApplication(excludeName = "org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration")- 支持多个:
excludeName = {"...", "..."} - 严格区分大小写,包路径必须完整准确,不带
.class后缀
通过 application.yml 或 application.properties 配置
适合需要按环境差异化控制,或不便于修改启动类的部署场景:
-
YAML 方式:
spring:<br> autoconfigure:<br> exclude:<br> - org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration<br> - org.springframework.boot.autoconfigure.mail.MailSenderAutoConfiguration
-
Properties 方式:
spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration,org.springframework.boot.autoconfigure.mail.MailSenderAutoConfiguration - 该配置对所有
@EnableAutoConfiguration生效,包括@SpringBootApplication
单独使用 @EnableAutoConfiguration 注解
适用于非标准启动结构,比如自定义引导类、测试配置类或 Spring Cloud 微服务组合场景:
@Configuration<br>@EnableAutoConfiguration(exclude = {RedisAutoConfiguration.class})<br>public class CustomConfig { }- 也可混用
exclude和excludeName,逻辑与@SpringBootApplication一致 - 注意:若同时存在多个
@EnableAutoConfiguration,每个都需单独指定排除项











