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

一、官方推荐

所有应用启动期间需要执行的初始化任务,都必须用 CommandLineRunnerApplicationRunner 来做,绝对不要写在构造器、@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("🚀 应用已就绪,开始执行业务初始化");
            // 加载缓存、初始化数据...
        }
    }
}
相关推荐
十五喵源码网5 小时前
基于springboot2+vue2的租房管理系统
java·毕业设计·springboot·论文笔记
whaledown13 小时前
Kafka 与 Java 消息队列入门:用订单场景理解核心机制
java·kafka·消息队列·springboot
二哈赛车手1 天前
新人笔记---最终版智能体图片分析完整方案,包括一些总结于经验,以及各种优化点讲解
java·笔记·spring·ai·springboot
十五喵源码网1 天前
基于SpringBoot2+vue2的酒店客房管理系统
java·毕业设计·springboot·论文笔记
这里是杨杨吖2 天前
SpringBoot+Vue高校在线考试系统 附带详细运行指导视频
vue·在线考试·springboot
就改了3 天前
ElasticsearchRestTemplate使用方法详解!!!
java·elasticsearch·springboot
郑洁文8 天前
旅游景点推荐系统的设计与实现
springboot·毕设·旅游系统·旅游景点推荐系统
ANnianStriver9 天前
PetLumina-AI 驱动的宠物生活管理平台
java·生活·vue3·springboot·ai编程·宠物·全栈开发
YDS8299 天前
DeepSeek RAG&MCP + Agent智能体项目 —— 集成ELK日志管理系统和Prometheus监控系统
java·elk·ai·springboot·agent·prometheus·deepseek
极光代码工作室10 天前
基于SpringBoot的任务管理系统
java·springboot·web开发·后端开发