核心思路是减少启动时必须初始化的bean数量,通过全局懒加载(spring.main.lazy-initialization=true)和精准@lazy标注关键高开销bean,结合缩小组件扫描与自动配置范围、规避循环依赖,提升spring boot启动速度。

核心思路是减少启动时必须初始化的 Bean 数量,把非关键、高开销、低使用率的 Bean 推迟到首次调用再创建。
优先启用全局懒加载
在 application.properties 中添加:
spring.main.lazy-initialization=true
这会为所有单例 Bean 默认启用懒加载,无需逐个加 @Lazy。适合中小型项目快速见效。注意:核心组件(如 WebMvcConfigurer、DataSource、TransactionManager)若被懒加载,可能引发运行时异常,建议配合 @ConditionalOnMissingBean 或白名单机制控制范围。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
精准标注 @Lazy 到具体 Bean
对以下几类 Bean 显式加 @Lazy 效果最明显:
- 数据库连接池(尤其是多数据源中非主库的 DataSource)
- Feign 客户端、RestTemplate 封装类(依赖远程服务健康检查)
- 定时任务调度器(如
@EnableScheduling下的ScheduledTaskRegistrar) - AI 模型服务、大文件解析器、报表导出引擎等资源密集型组件
- 仅用于后台管理或离线任务的服务类(如日志归档、数据迁移工具)
推荐加在类定义上(如 @Service @Lazy),而非注入点,避免代理嵌套和类型强转问题。
缩小组件扫描与自动配置范围
Spring 启动慢常因扫描过多包、触发大量自动配置。优化方式包括:
- 用
@SpringBootApplication(scanBasePackages = "com.example.core")限定扫描路径 - 通过
spring.autoconfigure.exclude禁用不用的自动配置类,例如:
spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration - 检查
pom.xml,移除未实际使用的 starter(如引入了spring-boot-starter-data-redis却没配 Redis,仍会触发部分初始化逻辑)
避免循环依赖与过早初始化陷阱
某些 Bean 因依赖关系被迫提前初始化,破坏懒加载效果。可采取:
- 用
ObjectProvider<x></x>替代直接@Autowired X,实现按需获取且不触发初始化 - 将构造器注入改为 setter 或方法注入,降低初始化耦合度
- 对存在循环依赖风险的模块,用
@DependsOn明确顺序,或拆分初始化逻辑到@PostConstruct中延后执行










