SpringBoot3:应用程序启动时,初始化工作[官方文档]

一、官方推荐

所有应用启动期间需要执行的初始化任务,都必须用 CommandLineRunner 或 ApplicationRunner 来做,绝对不要写在构造器、@PostConstruct、静态代码块里。

二、代码案例

  1. ApplicationRunner(推荐)
java 复制代码
@Component
@Order(1) // 数字越小越先执行
public class MyStartupTask implements ApplicationRunner {

    @Override
    public void run(ApplicationArguments args) throws Exception {
        System.out.println("✅ 应用启动完成,执行初始化任务...");
        
        // 这里可以安全调用所有 Bean、Service、DAO、配置
        // 加载缓存、初始化数据、校验配置、预热接口...
    }
}
  1. CommandLineRunner
java 复制代码
@Component
@Order(2)
public class MyCommandLineRunner implements CommandLineRunner {
    @Override
    public void run(String... args) throws Exception {
        System.out.println("✅ 启动后执行命令行任务");
    }
}

三、总结

1.Spring 启动任务,必须用CommandLineRunner/ApplicationRunner

2.它们的执行时间点:Spring 容器完全启动成功后、接收流量前 才执行 → 最安全、最稳定

3.用 @Order 控制执行顺序

4、可以写多个runner,执行不同的任务。

四、扩展

结合应用程序可用性状态,使用runner

java 复制代码
@Component
@Order(1)
public class AppInitTask implements ApplicationRunner {

    @Resource
    private ApplicationAvailability applicationAvailability;

    @Override
    public void run(ApplicationArguments args) {
        // 这里 100% 安全
        ReadinessState state = applicationAvailability.getReadinessState();
        
        if(state == ReadinessState.ACCEPTING_TRAFFIC){
            System.out.println("🚀 应用已就绪,开始执行业务初始化");
            // 加载缓存、初始化数据...
        }
    }
}
相关推荐
BLUcoding12 小时前
接口服务公网超时排查记录:SecureRandom 阻塞问题分析与解决
java·linux·springboot·aes·securerandom
我最爱吃鱼香茄子1 天前
【毕业设计优选】人力资源管理系统|Java|SpringBoot|Vue|前后端分离|带详细文档+部署教学视频
java·vue·毕业设计·springboot
做个文艺程序员2 天前
MinIO第05篇:MinIO事件通知机制与Kafka集成——构建SaaS平台的异步文件处理管道
kafka·消息队列·springboot·minio·事件驱动·异步处理
骑着蜗牛撵大象3272 天前
SpringBoot+Vue3 企业智能体侧挂架构:独立服务、独立数据库与主线零侵入落地
数据库·spring boot·架构·vue·springboot·事件驱动·服务拆分
程序猿_极客3 天前
【免费】分享一套优质的基于微信小程序的音乐播放器系统的设计与实现,源码+文档+视频详解(讲解)
微信小程序·小程序·springboot·音乐播放器小程序·音乐管理系统
cpolar技术支持5 天前
Spring Boot 接口本地正常,异地前端却报跨域?用 cpolar 跑通 CORS 预检与白名单
java·springboot·cpolar·前后端分离·cors
弹简特7 天前
【Java项目-企悦抽】17-抽奖模块02-抽奖接口实现
java·开发语言·状态模式·springboot
弹简特8 天前
【Java项目-企悦抽】16-抽奖模块01-获取活动完整信息接口实现
java·开发语言·状态模式·springboot
弹简特9 天前
【Java项目-企悦抽】15-活动管理模块02-活动创建测试与活动列表实现
java·开发语言·springboot
弹简特9 天前
【Java项目-企悦抽】13-奖品管理模块-奖品列表和创建奖品的实现
java·开发语言·网络·springboot