【Spring实战】05 CommandLineRunner

news2025/2/8 12:03:30

文章目录

    • 1. 简介
    • 2. 用法
      • 1)单个 CommandLineRunner
      • 2)多个 CommandLineRunner
    • 3. 优点
    • 4. 缺点
    • 总结

CommandLineRunner 是 Spring Boot 提供的一个接口,用于在 Spring Boot 应用程序启动后执行一些任务。通过实现 CommandLineRunner 接口,我们可以在应用程序启动时执行一些初始化操作,例如加载初始数据、建立连接,或者执行其他的启动任务。

1. 简介

CommandLineRunner 接口定义了一个单一的 run 方法,该方法会在应用程序启动后被调用。可以将多个 CommandLineRunner 实例注册到 Spring Boot 应用程序中,它们会按照注册的顺序依次执行。

源码如下

在这里插入图片描述

2. 用法

1)单个 CommandLineRunner

要实现 CommandLineRunner 接口,只需要实现它的 run 方法。

下面是一个简单的例子:

DemoCommandLineRunner.java

package com.cheney.demo;

import org.springframework.boot.CommandLineRunner;
import org.springframework.stereotype.Component;

@Component
public class DemoCommandLineRunner implements CommandLineRunner {
    @Override
    public void run(String... args) throws Exception {
        System.out.println("Hello CommandLineRunner");
    }
}

在上述代码中,DemoCommandLineRunner 类实现了 CommandLineRunner 接口,并在 run 方法中编写了打印 Hello CommandLineRunner 的代码。这个任务会在应用程序启动时执行。

启动类

package com.cheney.demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class DemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }
}

执行结果:

在这里插入图片描述

2)多个 CommandLineRunner

可以同时注册多个 CommandLineRunner 实例,并通过 @Order 注解或 Ordered 接口来指定它们的执行顺序。

下面是一个简单的例子:

DemoCommandLineRunner.java

package com.cheney.demo;

import org.springframework.boot.CommandLineRunner;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;

@Component
@Order(1)
public class DemoCommandLineRunner implements CommandLineRunner {
    @Override
    public void run(String... args) throws Exception {
        System.out.println("Hello CommandLineRunner");
    }
}

Demo2CommandLineRunner.java

package com.cheney.demo;

import org.springframework.boot.CommandLineRunner;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;

@Component
@Order(2)
public class Demo2CommandLineRunner implements CommandLineRunner {
    @Override
    public void run(String... args) throws Exception {
        System.out.println("Hello CommandLineRunner 2");
    }
}

在上述代码中,DemoCommandLineRunnerDemo2CommandLineRunner 分别标注了 @Order(1)@Order(2),指定了它们的执行顺序。如果不使用 @Order 注解,可以实现 Ordered 接口来设置顺序。

执行结果:

在这里插入图片描述

3. 优点

  • 简单方便

    CommandLineRunner 的设计目标是简化应用程序启动时的初始化工作,开发者只需实现 run 方法,将需要在启动时执行的逻辑放在其中即可,非常方便。

  • 与 Spring Boot 协同工作

    CommandLineRunner 是 Spring Boot 提供的标准接口之一,与 Spring Boot 的自动配置和生命周期机制协同工作,确保在应用程序启动时执行初始化任务。

  • 多任务支持

    应用程序可以同时注册多个 CommandLineRunner 实例,通过 @Order 注解或实现 Ordered 接口,可以指定它们的执行顺序,灵活支持多任务的初始化需求。

4. 缺点

  • 仅适用于 Spring Boot

    CommandLineRunner 是 Spring Boot 提供的特定接口,因此仅适用于基于 Spring Boot 的应用程序。如果应用程序不使用 Spring Boot,这种方式可能不够适用。

  • 局限于启动时执行

    CommandLineRunner 主要用于在应用程序启动时执行任务,如果需要其他触发点或更细粒度的控制,可能需要考虑其他方式。

  • 无法传递参数

    CommandLineRunnerrun 方法不接受参数,因此在运行时动态地传递参数可能会有些困难。如果需要更灵活的参数传递方式,可能需要考虑其他方式,如使用配置文件、环境变量等。

总结

CommandLineRunner 接口是 Spring Boot 中用于执行应用程序启动任务的一种方便的方式。通过实现这个接口,我们可以在应用程序启动时执行初始化操作,确保应用程序在启动后处于正确的状态。

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

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

相关文章

IntelliJ IDEA [设置] 隐藏 .idea 等 .XXX 文件夹

文章目录 1. 问题描述2. 解决办法3. 最后效果总结 我们使用 IntelliJ IDEA 导入项目的时候,经常会看到一些 .XXX 的文件夹(例如:.idea,.mvn,.gradle 等)。其实这些文件夹和我们代码编写是无关的&#xff0c…

5G NR无线蜂窝系统的信道估计器设计

文章目录 DMRS简介DMRS类型DMRS频域密度 信道估计实验仿真实验参数实验实验结论 DMRS简介 DMRS类型 类型A:DMRS位于时隙的第二个或第三个OFDM符号,由14个OFDM符号组成,当数据占据大部分时隙时使用A型映射。 类型B:用在URLLC中&a…

JSON在Java中的使用

目录 第一章、快速了解JSON1.1)JSON是什么1.2)json的语法格式①键值对、字符串、数字、布尔值、数组、对象②嵌套的格式 1.3)为什么使用JSON 第二章、发送和接收JSON格式数据2.1)postman发送JSON格式数据2.2)Java后端接…

开源verilog模拟 iverilog verilator +gtkwave仿真及一点区别

开源的 iverilog verilator 和商业软件动不动几G几十G相比,体积小的几乎可以忽略不计。 两个都比较好用,各有优势。 iverilog兼容性好。 verilator速度快。 配上gtkwave 看波形,仿真工具基本就齐了。 说下基本用法 计数器 counter.v module…

根文件系统制作-移植

【1】概念 根文件系统:系统运行所必须依赖的一些文件 (比如脚本、库、配置文件...),本质就是目录和文件。根文件系统镜像:将根文件系统按照某种格式进行打包压缩后生成的单个文件 rootfs-----> ramdisk.img 文件系…

多行文本(多行字符串)中,如果每行文本前都有空格,各行文本前空格数最小为n,则删除每行文本前的n个空格。textwrap.dedent(多行字符串)

【小白从小学Python、C、Java】 【计算机等考500强证书考研】 【Python-数据分析】 多行文本(多行字符串)中, 如果每行文本前都有空格, 各行文本前空格数最小为n, 则删除每行文本前的n个空格。 textwrap.dedent(多行字符串) 请问以下代…

汽车项目管理

项目节点: MR (Management Review)——管理层评审 KO (Kick Off)——项目正式启动 SI (Strategy Intent)——战略意图 SC (Strategy Confirmation)——战略确认 PA (Program Approval)——项目批准 PR (Product Readiness)——产品就绪 VP (Verification Prototype)…

在Vue3中使用vue-qrcode库实现二维码生成

本文主要介绍在Vue3中使用qrcode库实现二维码生成的方法。 目录 一、基础用法实现vue-qrcode库的参数介绍 在Vue3中实现二维码生成需要使用第三方库来处理生成二维码的逻辑。常用的库有 qrcode和 vue-qrcode。 一、基础用法实现 在Vue3中使用vue-qrcode库实现二维码生成的方…

人大金仓助力某市公积金核心业务系统国产化升级

近日,在金仓数据库的支撑下,某市住房公积金管理中心多个核心业务系统顺利上线,服务该市330余万常住人口,进一步“让信息多跑路,群众少跑路”,提升公积金服务效率。 “ 适应信息技术应用创新趋势的重点示范项…

Docker部署Nexus Maven私服并实现远程访问Nexus界面

🎬 鸽芷咕:个人主页 🔥 个人专栏: 《linux深造日志》《粉丝福利》 ⛺️生活的理想,就是为了理想的生活! 文章目录 1. Docker安装Nexus2. 本地访问Nexus3. Linux安装Cpolar4. 配置Nexus界面公网地址5. 远程访问 Nexus界面6. 固定N…

arduino声波测距

先安装&#xff1a;Ultrasonic库&#xff1b; #include <Arduino.h> #include <U8g2lib.h> #include <Wire.h> #include <Ultrasonic.h>U8G2_SSD1306_128X64_NONAME_F_SW_I2C u8g2(U8G2_R0,A5,A4, U8X8_PIN_NONE); // SDA:21 scl:22 Ultrasonic ul…

MyBatis——MyBatis的缓存

MyBatis的缓存 创建工程&#xff1a; 1缓存介绍 为什么使用缓存&#xff1f; 首次访问时&#xff0c;查询数据库&#xff0c;并将数据存储到内存中&#xff1b;再次访问时直接访问缓存&#xff0c;减少IO、硬盘读写次数、提高效率 Mybatis中的一级缓存和二级缓存&#xff1f;…

计算机网络简述

前言 计算机网路是一个很庞大的话题。在此我仅对其基础概述以及简单应用进行陈述。后续或有补充以形成完善的计算机网络知识体系。 一.计算机网络的定义 根据百度词条的描述&#xff0c;计算机网络是指将地理位置不同的具有独立功能的多台计算机及其外部设备&#xff0c;通过…

简单实现一个自定义loader

webpack定义的loader需要遵循单一功能原则&#xff0c;也就是一个loader只实现一个功能。在实现开发中&#xff0c;我们会直接使用诸如蓝湖等生成的样式&#xff0c;比如 button{background: rgb(255, 85, 46); }但为了考虑主题换肤&#xff0c;我们实现的想要的可能是 butto…

c语言中数据结构

一、结构体的由来 1. 数据类型的不足 C语言中&#xff0c;基本数据类型只有整型、字符型、浮点型等少数几种&#xff0c;无法满足复杂数据类型的需要。 2. 数组的限制 虽然数组可以存储多个同类型的数据&#xff0c;但是数组中的元素个数是固定的&#xff0c;无法动态地改变…

如何恢复未保存/误删除的 Excel 文件

想象一下&#xff0c;在处理一个重要的Excel文件时&#xff0c;如果Excel突然崩溃&#xff0c;你被迫关闭它而不保存文件&#xff0c;那会是什么感觉&#xff1f;我知道这是一种可怕的感觉&#xff0c;避免这种情况的最佳方法是使用自动保存功能。但是这个功能也能帮助找回已删…

shell 编程中内置的变量(冷门又好用)

简介 分别盘点一下 shell 中的内置变量&#xff0c;真的巨好用&#xff01;&#xff01;&#xff01;包括&#xff1a;环境变量类、shell 变量类、终端设置类和其他一些变量。 常用的内置变量目录如下 1. 环境变量类 $MACHTYPE&#xff1a;机器类型 $OSTYPE&#xff1a;操作…

【Python高阶技巧】闭包、装饰器

一、闭包 1、闭包的用途和用法2、nonlocal关键字的作用闭包注意事项 优缺点 二、装饰器 装饰器的作用和用法 一、闭包 在编程中&#xff0c;闭包&#xff08;Closure&#xff09;是指一种函数对象&#xff0c;它可以访问其自身范围&#xff08;词法作用域&#xff09;之外…

详细讲解Java8中的forEach()用法

目录 前言1. forEach()函数2. demo 前言 在实战中学习新用法&#xff0c;特此记录下每个笔记&#xff0c;感兴趣也可收藏也可补充细节 代码例子&#xff1a; import java.util.Arrays; import java.util.List;public class ForEachExample {public static void main(String[…

shell 循环遍历的详细用法

简介 在 shell 脚本中&#xff0c;循环结构用于重复执行一组代码块&#xff0c;包括 for 循环、while 循环&#xff0c;可以用于遍历数字、字符串、数组、文件等。这篇文章会详细介绍这两种遍历方式&#xff0c;以及各种实例场景。 文章目录结构如下 1. 循环遍历的特点 2. 循…