Spring Boot 项目初始化

一、什么是 CommandLineRunner

CommandLineRunner 是 Spring Boot 提供的一个 函数式接口,声明如下:

复制代码

该接口只有一个 run(String... args) 方法,会在 Spring Boot 容器启动完成后被自动调用

你可以将它理解为一种"钩子函数",用于执行初始化逻辑。


二、CommandLineRunner 的作用

主要用于:

作用 说明
启动初始化操作 加载缓存数据、初始化数据库数据、生成初始配置文件等
校验环境依赖 比如检查数据库、Redis、外部服务是否可用
注册服务或发送启动日志 向注册中心、监控系统报告服务已启动
接收命令行参数 解析命令行参数,实现不同的启动模式(例如 debugbatch

三、如何实现 CommandLineRunner?

1. 基本用法

java 复制代码
import org.springframework.boot.CommandLineRunner;
import org.springframework.stereotype.Component;

@Component
public class MyStartupRunner implements CommandLineRunner {

    @Override
    public void run(String... args) throws Exception {
        System.out.println("应用启动完成,开始执行初始化逻辑...");
        // 可以执行任意逻辑,例如初始化数据、加载缓存等
    }
}

只要这个类被 Spring 扫描到(加了 @Component),Spring Boot 启动后就会自动执行 run() 方法。


2. 注入其他 Bean 使用

java 复制代码
@Component
public class DataInitializer implements CommandLineRunner {

    private final UserRepository userRepository;

    public DataInitializer(UserRepository userRepository) {
        this.userRepository = userRepository;
    }

    @Override
    public void run(String... args) throws Exception {
        if (userRepository.count() == 0) {
            userRepository.save(new User("admin", "123456"));
            System.out.println("已插入初始用户");
        }
    }
}

此时你可以访问数据库、Redis 等所有依赖,因为上下文已完全加载。


3. 使用 @Order 控制执行顺序(多个 CommandLineRunner)

java 复制代码
@Component
@Order(1)
public class Runner1 implements CommandLineRunner {
    public void run(String... args) {
        System.out.println("Runner1 执行");
    }
}

@Component
@Order(2)
public class Runner2 implements CommandLineRunner {
    public void run(String... args) {
        System.out.println("Runner2 执行");
    }
}
相关推荐
AC赳赳老秦2 小时前
农产品公开数据应用:OpenClaw 抓取农产品价格、产销公开数据,实现农产品行情动态监测
java·c语言·javascript·python·php·deepseek·openclaw
1001101_QIA3 小时前
从 CPU 到 GPU:高速缓存、指令并行与 CUDA 执行原理入门
java·后端·spring
2501_928996223 小时前
信创备份一体机性能焦虑根源与中科热备国产CPU平台实测拆解
后端·数据安全·测试
API快乐传递者3 小时前
淘宝海外商品详情接口实战指南:从全球开放平台到跨境铺货的全链路方案
java·前端·数据库
邪修king3 小时前
Re: Linux系统篇(十八):进程篇(七): 进程深度解析:从 fork 创建到退出的完整旅程(附写时拷贝原理 + 代码实战)
java·linux·运维
m0_587383003 小时前
24小时自助健身系统源码实战:从架构设计到部署落地
java·架构·系统架构·需求分析
卓怡学长3 小时前
w156一周穿搭App的设计与实现
java·spring boot·spring·maven·intellij-idea
万年咸鱼3 小时前
Java PrintStream 详解:从基础用法到实战技巧
java·开发语言·python
吴声子夜歌3 小时前
ApacheCommons——commons-compress(解压缩工具)
java·apache