【Spring实战】05 CommandLineRunner

文章目录

    • 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 {@Overridepublic 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 {@Overridepublic 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 {@Overridepublic 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.mzph.cn/news/578284.shtml

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

相关文章

HarmonyOS共享包应用内HSP开发指导

应用内HSP开发指导 应用内HSP指的是专门为某一应用开发的HSP,只能被该应用内部其他HAP/HSP使用,用于应用内部代码、资源的共享。 应用内HSP跟随其宿主应用的APP包一起发布,与该宿主应用具有相同的包名和生命周期。 开发应用内HSP HSP模块…

【Qt-Button】

Qt编程指南 ■ QPushButton去除虚线边框&#xff1a;QPushButton 中添加 buttonGroup组合互斥按钮QPushButton *bt static_cast<QPushButton *>(sender()) ■ QToolButton■ QRadioButton■ QCommandLinkButton■ QDialogButtonBox■ QButtonGroup■■■■ ■ QPushButt…

JDKtomcat环境配置共享目录防火墙

&#x1f3ac; 艳艳耶✌️&#xff1a;个人主页 &#x1f525; 个人专栏 &#xff1a;《产品经理如何画泳道图&流程图》 ⛺️ 越努力 &#xff0c;越幸运 目录 1、配置JDK 2、配置tomcat 3、配置文件夹共享功能 4、防火墙配置 5、思维导图 1、配置JDK 建立一个共…

【数字IC设计】Verilog计算x/255的商和余数

问题描述 已知x是16位无符号整数,求x除以255的余数和商。尽量降低实现方式的硬件开销(包括面积和时序) 思路 由于除数255是一个常数,因此,直观上给人的感觉就是应该有相应的优化方法,即相对于除数可变的实现方式,在面积、时序方面应该有所改善。 对于该问题,本文给出…

目标检测-Two Stage-RCNN

文章目录 前言一、R-CNN的网络结构及步骤二、RCNN的创新点候选区域法特征提取-CNN网络 总结 前言 在前文&#xff1a;目标检测之序章-类别、必读论文和算法对比&#xff08;实时更新&#xff09;已经提到传统的目标检测算法的基本流程&#xff1a; 图像预处理 > 寻找候选区…

微服务架构<2>

在电商项目中&#xff0c;我们针对一些核心业务&#xff0c;比较复杂的业务需要做一些设计以及优化的过程首先我们针对于订单的模块拆分了2个子模块1.order-curr实时下单业务 2.order-his 做一些历史的订单归档我们的订单业务 >商品添加至购物车 >购物车结算--> 订单…

摇杆控制人物移动

摇杆控制人物移动 一、UI搭建二、3d模型搭建三、脚本JoyStickBar.csPlayerController.cs 工程在我资源里名字叫Joystickbar.unitypackage [连接](https://download.csdn.net/download/qq_42194657/12043019?spm1001.2014.3001.5503) 一、UI搭建 JoyStickBar是图片背景 JoySt…

培训班毕业生的出路

前面几篇文章讲的都是如何规避培训班的包装简历&#xff0c;是不是意味着包装简历就没有机会了呢&#xff1f; 首先一点&#xff0c;以我了解的帝都IT市场&#xff0c;各种各样的IT公司数目繁多&#xff0c;面试官的水平也是参差不齐&#xff0c;更何况还有onsite&#xff08;…

算法设计与分析实验报告-分治法相关练习题

课本分治法章节课后部分练习题。 算法设计与分析实验报告-递归与分治策略 算法设计与分析实验报告-动态规划算法 算法设计与分析实验报告-回溯法 算法设计与分析实验报告-分治法相关练题 北京大学出版社-算法设计与分析 五、程序题 1. 试给出用分治法求某集合中元素值为偶…

Nestjs使用log4j打印日志

众所周知&#xff0c;nest是自带日志的。但是好像没有log4j香&#xff0c;所以咱们来用log4j吧~ 我只演示最简单的用法&#xff0c;用具体怎么样用大家可以自己进行封装。就像前端封装自己的请求一样。 一、安装 yarn add log4js stacktrace-js 二、使用 主要就三个文件&a…

ArkUI动画概述

目录 1、按照页面分类 2、按照功能分类 3、显示动画 4、属性动画 动画的原理是在一个时间段内&#xff0c;多次改变UI外观&#xff0c;由于人眼会产生视觉暂留&#xff0c;所以最终看到的就是一个“连续”的动画。UI的一次改变称为一个动画帧&#xff0c;对应一次屏幕刷新&a…

一开始我还不信!高德导航红绿灯竟然能读秒?

高德导航红绿灯为啥能读秒&#xff1f; 1 内部员工吐露 每天工作其实就是负责自己片区的红绿灯&#xff0c;一大早就去校对时间&#xff0c;然后发布到后台。是的&#xff0c;统计出来的&#xff0c;而且还是人工统计&#xff0c;有误差请见谅[害羞] 真的是很辛苦了&#xf…

npm常见错误

三个方面 1. npm ERR! code ELIFECYCLE npm ERR! errno 1 npm ERR! code ELIFECYCLE npm ERR! errno 1 npm ERR! phantomjs-prebuilt2.1.15 install: node install.js npm ERR! Exit status 1 npm ERR! npm ERR! Failed at the phantomjs-prebuilt2.1.15 install script. np…

如何使用队列处理 API 速率限制

对于遇到速率限制的应用程序来说也是一个挑战&#xff0c;因为它需要“放慢速度”或暂停。这是一个典型的场景&#xff1a; 初始请求&#xff1a;当应用程序发起与 API 的通信时&#xff0c;它会请求特定的数据或功能。API 响应&#xff1a; API 处理请求并响应请求的信息或执…

12.25

led.c #include "led.h" void all_led_init() {RCC_GPIO | (0X3<<4);//时钟使能GPIOE_MODER &(~(0X3<<20));//设置PE10输出GPIOE_MODER | (0X1<<20);//设置PE10为推挽输出GPIOE_OTYPER &(~(0x1<<10));//PE10为低速输出GPIOE_OSPEED…

单集群400TB,OceanBase稳定支撑快手核心业务场景

一款日均超过千万人访问的短视频 App 快手&#xff0c;面对高并发流量如何及时有效地处理用户请求&#xff1f;通过在后端配置多套 MySQL 集群来支撑高流量访问&#xff0c;以解决大数据量存储和性能问题&#xff0c;这种传统的 MySQL 分库分表方案有何问题&#xff1f;快手对分…

评估回馈电子负载的重要指标?

回馈电子负载是用于测试电源、电池和其他电子设备性能的设备。它可以模拟实际负载&#xff0c;同时将多余的能量回馈到电网或电池中。在选择和使用回馈电子负载时&#xff0c;有几个重要的指标需要考虑&#xff1a; 功率范围&#xff1a;回馈电子负载的功率范围是指其能够提供的…

巅峰画师Midjourney:新时代的独角兽

介绍 AI绘画领域中&#xff0c;Midjourney处于绝对地位&#xff0c;并且一年时间就登顶。 Midjourney是一家独立的AI研究实验室,探索新的思维媒介,拓展人类的想象力。 它由一个小型的自筹资金团队组成,专注于设计、人类基础设施和AI。 在AI绘画领域,Midjourney取得了非常突出…

百度Apollo五步入门自动驾驶:Dreamview与离线数据包分析(文末赠送apollo周边)

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏:《linux深造日志》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! ⛳️ 粉丝福利活动 ✅参与方式&#xff1a;通过连接报名观看课程&#xff0c;即可免费获取精美周边 ⛳️活动链接&#xf…

pytest 断言异常

一、前置说明 在 pytest 中,断言异常是通过 pytest 内置的 pytest.raises 上下文管理器来实现的。通过使用 pytest.raises,可以捕获并断言代码中引发的异常。 二、操作步骤 1. 编写测试代码 atme/demos/demo_pytest_tutorials/test_pytest_raises.py import pytest# 示例…