Spring Boot — CommandLineRunner 启动后执行

基本概念

CommandLineRunner 是 Spring Boot 提供的函数式接口,在 Spring 容器初始化完成后、应用正式对外提供服务前,自动调用其 run() 方法。

@FunctionalInterface
public interface CommandLineRunner {
    void run(String... args) throws Exception;
}

典型场景

  • 数据字典自动建表/改表
  • 初始化缓存
  • 预加载配置
  • 数据迁移脚本
  • 启动后一次性校验

与 ApplicationRunner 的区别

CommandLineRunnerApplicationRunner
参数原始 String... argsApplicationArguments args(支持 --key=value 解析)

功能上几乎等价,只是参数形式不同。

执行顺序控制

多个 Runner 通过 @Order 注解控制执行顺序:

@Component
@Order(1)  // 数字越小越先执行
public class RunnerA implements CommandLineRunner { ... }
 
@Component
@Order(2)
public class RunnerB implements CommandLineRunner { ... }

示例

@Component
public class AutoSchemaSyncRunner implements CommandLineRunner {
 
    @Override
    public void run(String... args) {
        // 服务启动后自动执行数据字典表结构比对与修复
        schemaSyncService.sync();
    }
}