Spring Boot 项目初始化

一、什么是 CommandLineRunner

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

 

该接口只有一个 run(String... args) 方法,会在 Spring Boot 容器启动完成后被自动调用
你可以将它理解为一种“钩子函数”,用于执行初始化逻辑。


二、CommandLineRunner 的作用

主要用于:

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

三、如何实现 CommandLineRunner?

1. 基本用法

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

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


2. 注入其他 Bean 使用

@Component
public class DataInitializer implements CommandLineRunner {private final UserRepository userRepository;public DataInitializer(UserRepository userRepository) {this.userRepository = userRepository;}@Overridepublic void run(String... args) throws Exception {if (userRepository.count() == 0) {userRepository.save(new User("admin", "123456"));System.out.println("已插入初始用户");}}
}

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


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

@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 执行");}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/84758.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/84758.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C# winform教程(二)----ComboBox

一、作用 一个可以输入也可以下拉的列表框。 二、属性 一般我们都是使用下拉列表,不使用在线编辑(本人没用过) 属性 名称内容含义items组合框中项可以定义下拉列表的值DropDownStyle外观和功能是否可以填写,一般选择dropdownli…

FFmpeg裁剪视频在Android上的实现

添加依赖: implementation com.arthenica:mobile-ffmpeg-full:4.4.LTS 代码实现: fun cropMiddleThird(inputPath: String, outputPath: String) {val cmd arrayOf("-y", // 覆盖输出文件"-i", inputPath,"-filter:v&quo…

openEuler 22.03 sp1 更新openssh 10.0p2 —— 筑梦之路

华为欧拉openEuler制作openssh 9.1/9.2/9.3 p1 rpm——筑梦之路_欧拉构建openssh-CSDN博客 上面是需要修改的sshd_config配置,将这3行注释掉。 附上22.03 sp1的yum源文件 # cat openEuler.repo #generic-repos is licensed under the Mulan PSL v2. #You can use t…

AGI(4)大模型的推理综述

本文源自基于基础模型的推理综述《A Survey of Reasoning with Foundation Models》,因为原文有点难于理解,在这个论文的基础上增加了自己的解释和理解,重新整理成此文。大家可以通过查看原文阅读原始论文。 1、推理的概念 推理是解决复杂问题…

Rust 中的宏与函数

在 Rust 编程中,宏(Macro)和函数(Function)是两种非常重要的编程工具。虽然它们都可以用来组织代码和实现复用,但它们在定义方式、作用原理、性能、灵活性以及适用场景等方面存在诸多不同。本文将详细介绍 …

c++中左值与右值

在 C++ 中,左值(lvalue) 和 右值(rvalue) 是表达式的基本属性,它们决定了表达式能否被赋值、取地址等操作。 1. 核心定义 左值(lvalue) 特点:表示一个具名的、持久的对象,可位于赋值语句左侧。示例: int x = 42; // x是左值 x = 100; // 合法:左值可…

DeepSeek14-open-webui 常用概念区分

I、“Tools & Functions” 与 Pipelines(工作流系统)区别 以下是“Tool & Functions”与“Pipelines”的区别、适用场景及作用的详细分析,内容基于参考文档提取与总结: 一、本质区别 维度Tool & FunctionsPipeline…

PaddleOCR + Flask 构建 Web OCR 服务实战

1、前言 随着图像识别技术的发展,OCR(光学字符识别)已经成为很多应用场景中的基础能力。PaddleOCR 是百度开源的一个高性能 OCR 工具库,支持中英文、多语言、轻量级部署等特性。 而 Flask 是一个轻量级的 Python Web 框架,非常适合快速构建 RESTful API 或小型 Web 应用…

C++结构体初始化与成员函数实现语法详解

C结构体初始化与成员函数实现语法详解 一、结构体静态成员初始化语法 在C中,静态成员变量需要在类外部进行定义和初始化。提供的代码展示了如何为MAIN_PROPULSION_CAN类的静态成员变量进行初始化: MAIN_PROPULSION_CAN::VoltageThresholds MAIN_PROPU…

买了新内存条插上bios识别,进入系统不可用,b450主板,内存插槽A1A2 可以点亮,B1B2不可以,A2B2不可以,B1B2还是不可以

提示:买了新内存条插上bios识别,进入系统不可用,b450主板,内存插槽A1A2 可以点亮,B1B2不可以,A2B2不可以 文章目录 前言——环境一、第一种情况,开机不能点亮二、第二种情况, 总内存&#xff0c…

7.4.1_2B树的插入删除

B树插入: 假如是m阶B树,插入关键字时都要满足每个节点上的关键字个数最少为m/2向上取整-1关键字,最多有m-1个关键字,且每次插入的新元素一定是放在最底层的终端节点(因为如果不是放在终端节点,会导致该节点上可能有叶子…

Linux系统基本操作指令

Linux系统基本操作指令 文章目录 Linux系统基本操作指令一、介绍二、基础设置2.1 设置ubuntu与window的共享目录2.2 ubuntu系统简单介绍 三、Linux命令及工具介绍3.1 目录管理命令(功能,格式,参数,系统参数)3.2 文件操作命令 四、网络命令4.1…

系统思考VS心智模式

在这张图片中,我们看到的是两杯相同价格的咖啡,它们的价格显示方式不同。一杯咖啡的原价和现价都写得很大,而另一杯的价格则以较小的字体呈现。这种微妙的设计差异揭示了一个有趣的心理现象——心智模式。 人们在面对同样的价格时&#xff0…

all()函数和any()函数

参考文献 在if上使用.all和.any # 中心点未改变,说明达到稳态,结束递归if (self.points new_center).all():sum self.__sumdis(result)return result, self.points, sum

Maven:依赖管理就像乐高拼装的艺术

目录 🏗️ 第一章:Maven是高级乐高玩家🔍 依赖管理的基本单元 🧩 第二章:多模块项目——乐高巨舰组装术🌟 为什么要拆分模块?🛠️ 父子POM配置示范 ⚔️ 第三章:依赖冲突…

空间数据挖掘 期末复习

前言:此篇复习笔记结合了课程ppt和deepseek回答进行总结,如有谬误恳请指正。 期末考例题 (名词解释*10、简答*6、论述*6) 一、名词解释 数据挖掘 过拟合(Overfitting) Apriori算法 决策树(…

跳跳杆、弹跳杆、Poto stick:百年弹跳玩具的健康与使用分享(大模型改写)

跳跳杆:百年弹跳神器的健康争议与安全指南 (用DeepSeek改写前一篇文章,可惜没有接广告,否则植入一些链接多好) 🔍 一、健康功效:惊喜与风险并存 争议性健康主张 坊间流传跳跳杆可能具备&…

WHAT - React Native 开发 App 从 0 到上线全流程周期

文章目录 一、React Native App 开发流程总览二、各阶段详细说明需求分析 & 产品规划技术选型 & 方案确定项目初始化A. 使用 Expo(推荐新手)B. 使用 React Native CLI(自由度更高) UI 开发 功能开发(主开发阶…

Windows11 无法发现局域网内设备解决方法

临时解决 发生问题绝大多数Windows11 24H2版本,该版本目前来看没有永久解决方案 初步问题可以定位在FDResPub服务问题,重启该服务可以短暂恢复,临时解决方案就是重启该服务,然后把网络设备右键创建快捷方式 做成批处理文件 创建…

张 心理健康咨询相关论文;AI心理咨询数字孪生:个性化风格的突破

张 心理健康咨询相关论文 EmoLLM:多模态情感理解与大型语言模型的结合 PsyDT:使用 LLM 构建具有个性化咨询风格的心理咨询师数字孪生 目前,大型语言模型 (LLM) 在心理咨询领域取得了重大进展。然而,现有的心理健康 LLM 忽略了一个关键问题,即他们没有考虑不同的心理咨…