最直接的方式是启用 debug=true 查看自动配置报告,重点排除未使用的 Positive matches 类(如 DataSourceAutoConfiguration),优先用 @SpringBootApplication(exclude=...) 注解精准排除,避免依赖 spring.autoconfigure.exclude 配置项。

怎么确认哪些自动配置在拖慢启动
最直接的方式是打开 debug=true,Spring Boot 会在控制台输出完整的自动配置报告。重点看 Positive matches 部分——它列出所有被匹配并实际生效的自动配置类,比如 DataSourceAutoConfiguration、RedisAutoConfiguration、MailSenderAutoConfiguration。这些就是真正在初始化 Bean 的“源头”。如果你项目里没用数据库、没连 Redis、也没发邮件,那它们全属于可排除项。
如何用 @SpringBootApplication(exclude = ...) 精准排除
在主启动类上加 exclude 参数,传入确定不用的自动配置类名:
@SpringBootApplication(exclude = {
DataSourceAutoConfiguration.class,
RedisAutoConfiguration.class,
MailSenderAutoConfiguration.class,
ThymeleafAutoConfiguration.class,
ActuatorAutoConfiguration.class
})
public class Application { ... }
- 必须用
.class后缀,不能写字符串 - 排除顺序无关,但建议按业务依赖关系从强到弱列(比如先排数据源,再排缓存)
- 如果某个 starter 被完全弃用(如不用 JPA),直接删掉对应依赖比 exclude 更彻底
为什么不能只靠 spring.autoconfigure.exclude 配置项
虽然可以在 application.properties 里写 spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration,但它有硬伤:
- 类名必须写全限定名,拼错一个字母就失效,且无编译检查
- 无法在 IDE 中跳转、无法被重构工具识别
- 多个类要用英文逗号分隔,容易因空格或换行导致解析失败
- 对条件化配置(如
@ConditionalOnClass)的屏蔽不如代码级 exclude 可靠
所以优先用注解方式,配置项仅作临时调试或灰度环境备用。
排除后要注意的隐性影响
有些自动配置看似无关,实则被其他功能间接依赖。例如:
- 排除
TaskExecutionAutoConfiguration可能导致@Async失效 - 排除
WebMvcAutoConfiguration会干掉整个 Spring MVC 基础设施 - 排除
ValidationAutoConfiguration后@Valid注解不再触发校验
真正要排除的,是那些**既没声明相关 Bean,也没引入对应 starter,更没在代码中显式使用其能力**的配置类。上线前务必验证核心接口是否仍可正常调用,尤其注意健康检查、监控端点和异步任务这类容易被忽略的路径。

















