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("🚀 应用已就绪,开始执行业务初始化");
            // 加载缓存、初始化数据...
        }
    }
}
相关推荐
极光代码工作室2 天前
基于SpringBoot的内容管理系统(CMS)
java·springboot·web开发·后端开发
欢醉3 天前
一次P0 故障:微服务线程数莫名暴涨 10 倍,线程问题踩坑
springboot·线程·springcloud
YDS8295 天前
大营销平台 —— 第二阶段初始化以及DB路由中间件的使用及基本原理
java·springboot·ddd
小小放舟、7 天前
PaiCLI-Demo:从零实现 ReAct Agent + Tool Call
java·后端·intellij-idea·springboot·agent·react·tool call
碎碎念_4928 天前
前后端分离项目开发规范
nginx·vue·springboot·restful
欢醉8 天前
k8s的pod容器中微服务无法创建新线程unable to create new native thread
kubernetes·springboot
她说..10 天前
Apache Commons Lang3 Pair 完整版实战详解
java·spring·java-ee·apache·springboot
文慧的科技江湖13 天前
一文读懂光伏、储能,充电工作原理,是如何实现闭环的,其中微电网(ems)是什么;这个内容,就看懂了源网荷储。十五五规划里面最核心的能源管理内容
开源·springboot·储能·光伏
AI人工智能+电脑小能手13 天前
【大白话说Java面试题 第163题】【06_Spring篇】第23题:说说SpringBoot 自动配置原理?
java·自动配置·springboot·spi·条件注解
AI人工智能+电脑小能手13 天前
【大白话说Java面试题 第164题】【06_Spring篇】第24题:如何理解 SpringBoot 的 Starter?
java·自动配置·springboot·starter·自定义组件