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("🚀 应用已就绪,开始执行业务初始化");
            // 加载缓存、初始化数据...
        }
    }
}
相关推荐
苏渡苇6 小时前
DeepSeek V4 实战:打造一个智能 Java 项目源码分析助手
springboot·jdk21·spring ai·deepseek·deepseek v4
玛卡巴卡ldf2 天前
【Springboot9】将业务模块数据导出为PDF
pdf·springboot
阿冰冰呀3 天前
互联网大厂Java求职面试实录:谢飞机的“水货”之路
java·mybatis·dubbo·springboot·线程池·多线程·hashmap
下次再写7 天前
Java互联网大厂面试技术问答实战:涵盖Java SE、Spring Boot、微服务及多场景应用
java·数据库·缓存·面试·springboot·microservices·技术问答
程序员老邢7 天前
【技术底稿 18】FTP 文件处理 + LibreOffice Word 转 PDF 在线预览 + 集群乱码终极排查全记录
java·经验分享·后端·pdf·word·springboot
DavidSoCool7 天前
Springboot AI 创建MCP Server
java·spring·ai·大模型·springboot·mcp
下次再写9 天前
互联网大厂Java面试三轮技术问答及详解——涵盖Spring Boot与微服务
java·springboot·microservices·interview
吕永强10 天前
基于SpringBoot+Vue校园报修系统的设计与实现(源码+论文+部署)
vue·毕业设计·springboot·毕业论文·报修系统·校园报修
Flittly12 天前
【SpringSecurity新手村系列】(3)自定义登录页与表单认证
java·笔记·安全·spring·springboot