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 天前
分析一个线程日志工具类
java·springboot
鬼先生_sir2 天前
SpringBoot-基础面试篇
java·springboot·java面试
成为大佬先秃头3 天前
日志框架:Logback
springboot·logback
Flittly4 天前
【SpringAIAlibaba新手村系列】(11)Embedding 向量化与向量数据库
java·笔记·spring·ai·springboot
九皇叔叔5 天前
005-SpringSecurity-Demo 配置外部文件映射
java·springboot·文件·springsecurity
玛卡巴卡ldf5 天前
【Springboot5】审批流工作流引擎(业务、审批分离)排除if else
java·springboot
九皇叔叔6 天前
001-SpringSecurity-Demo 创建项目
java·springboot·springsecurity