Spring Boot 启动慢主因是默认自动配置和扫描过于宽泛,优化需精准克制:用/actuator/startup定位瓶颈,全局懒加载、收缩扫描范围、排除无用自动配置,中小型项目可从10–30秒降至4–7秒。

Spring Boot 启动慢,核心不是代码写得差,而是默认行为太“热心”——它会主动扫描、自动配置、提前初始化大量你根本用不到的东西。优化的关键是“精准克制”:先看清哪一步最拖后腿,再针对性砍掉冗余动作。实测中,中小型项目从 10–30 秒压到 4–7 秒很常见,大型服务也能从 60+ 秒降到 20 秒内。
用 /actuator/startup 定位真正瓶颈
别猜,直接看数据。加依赖并暴露端点:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
配置开启:
立即学习“Java免费学习笔记(深入)”;
management.endpoints.web.exposure.include=startup
management.endpoint.startup.enabled=true
启动后访问 http://localhost:8080/actuator/startup,按耗时排序,重点关注前三名:通常是 Bean 初始化、自动配置评估、组件扫描。90% 的优化都围绕这三块展开。
全局开启懒加载,让非核心 Bean 按需创建
Spring Boot 2.2+ 支持一键延迟所有单例 Bean 初始化:
spring:
main:
lazy-initialization: true
效果立竿见影:电商服务从 8.2 秒 → 5.1 秒,网关从 12 秒 → 7.3 秒。注意两点:
当用户要求为 Java 代码添加注释、修改注释、审查注释、整理注释格式,或要求按照代码注释规范处理 Java 文件时,使用本技能。本技能用于统一生成和维护 Java 类注释模板、按 Git 对比 release 判断版本号、补充每行代码上方中文块注释、调整注释空行规则,并保持 Java 文件 UTF-8 无 BOM 编码。典型触发场景包括:补充类注释、更新 @version、检查 @author 来源、整理行尾注释、把注释放到代码上一行、检查注释是否符合规范、构建前检查 Java 注释风格。
- 首次调用该 Bean 的接口会略慢(把耗时从启动阶段挪到运行时)
- 对关键 Bean(如配置中心客户端、健康检查器),用 @Lazy(false) 显式禁用懒加载
收缩组件扫描范围,拒绝无差别扫包
@SpringBootApplication 默认扫描主类所在包及其全部子包,第三方库或测试类混在里面就白扫了。改成显式声明:
@SpringBootApplication(scanBasePackages = {
"com.example.api",
"com.example.service",
"com.example.infra"
})
更进一步,可排除特定路径或注解:
@ComponentScan(excludeFilters = {
@Filter(type = FilterType.REGEX, pattern = "com.thirdparty.*"),
@Filter(type = FilterType.ANNOTATION, classes = Configuration.class)
})
某中型项目收窄扫描后,启动时间从 8.5 秒 → 4.1 秒。
精准剔除没用的自动配置
启动时加 --debug 参数,控制台会输出完整自动配置报告。找那些标着 “matched” 却完全没用的类,比如:
- DataSourceAutoConfiguration(没连数据库)
- RedisAutoConfiguration(没用 Redis)
- MailSenderAutoConfiguration(不发邮件)
在启动类上排除:
@SpringBootApplication(exclude = {
DataSourceAutoConfiguration.class,
RedisAutoConfiguration.class,
MailSenderAutoConfiguration.class
})
金融系统排除 20 个无用配置后,启动从 6.5 秒 → 4.2 秒。

















