ApplicationRunner和CommandLineRunner的作用和区别

news/2024/5/2 7:13:10/文章来源:https://blog.csdn.net/hc1285653662/article/details/126942536

一、作用

ApplicationRunner和CommandLineRunner都用于在容器启动后(也就是SpringApplication.run()执行结束)执行某些逻辑。

可用于项目的一些准备工作,比如加载配置文件,加载执行流,定时任务等

二、共同点和区别

共同点

  • 执行时机都是在容器启动完成时进行
  • 两个接口中都有一个run方法

不同点
run 方法中的参数是不一样的

CommandLineRunner 接收的参数为:name1 name2 name3 例如:
java -jar xxx.jar data1 data2 data3

在项目启动时添加参数
在这里插入图片描述
断点打进 CommandLineRunner,可以看到接收的参数
在这里插入图片描述

断点打进 ApplicationRunner,可以看到接收的参数
在这里插入图片描述

三、执行顺序

ApplicationRunner和CommandLineRunner 都可以有多个实现类
,怎么让多个实现类按照一定的顺序来执行

1、可以在实现类上加上@Order注解指定执行的顺序

2、可以在实现类上实现Ordered接口

【注意】 数字越小,优先级越高

四、代码实践

1、主启动类上添加注释

@Slf4j
@SpringBootApplication
public class HelloWorldApplication {public static void main(String[] args) {// 启动spring 应用log.info("Spring BOOT 启动开始");SpringApplication.run(HelloWorldApplication.class,args);log.info("Spring BOOT 启动结束");}
}

2、向容器中添加ApplicationRunner和CommandLineRunner的实现类

@Component
@Slf4j
public class MyApplicationRuner implements ApplicationRunner {@Overridepublic void run(ApplicationArguments args) throws Exception {log.info("ApplicationRunner=====执行开始");log.info(args.toString());log.info("ApplicationRunner=====执行完成");}
}@Component
@Slf4j
public class MyCommandLineRunner implements CommandLineRunner {@Overridepublic void run(String[] args) throws Exception {log.info("CommandLineRunner=====执行开始");log.info(args.toString());log.info("CommandLineRunner=====执行完毕");}
}

在这里插入图片描述
【注意】可以看到在都没有标注order的情况下,ApplicationRunner 的优先级要高于CommandLineRunner

如果在组件上加了order注解,则按照注解定义的顺序执行
在这里插入图片描述

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

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

相关文章

nodejs+vue+elementui学生成绩管理系统python/php/java445

前台首页功能模块 学生成绩管理系统设计;主要实现首页、优秀教师、优秀班主任、学校简介、教学课件、公告信息、优秀学生、试卷列表、新闻资讯、我的、跳转到后台,功能。 优秀教师,在优秀教师页面可以填写标题、教师工号、荣誉等详细&#xf…

经典论文研读:《F1:A Distributed SQL Database That Scales》

一 简介 F1是Google提出的分布式关系型数据库,支持便捷的水平伸缩。这篇论文是NewSQL分布式数据库架构的基石。论文首先定义了F1分布式数据库设计的关键方向: 可伸缩性:数据库要提供对业务透明的水平扩展能力,并支持数据迁移、数…

全同态加密(FHE)体系概述

同态加密定义 假设有这样一个场景,用户有一组私密数据,被加密存储在了第三方的云平台,现在,该用户想对这组数据进行某种处理,但是处理过程和结果都不想让第三方云平台看到。当然,用户可以选择将数据下载下…

ITU-T G.781解读(一)

引言 本系列是作者在学习ITU-T时做学习笔记之用,ITU-T的标准库是一个非常庞大的系列,尽管网络上有许多对标准的解读,但作者认为要想系统的掌握一个系列的知识,还是要自己看一遍原汁原味的原文。 时钟同步准则 同步信息通过同步…

【操作系统】第三章:内存管理

第三章:内存管理 OVERVIEW第三章:内存管理一、内存管理1.内存管理内容(1)地址转换:Point1:程序装入Point2:程序链接(2)内存保护:(3)内…

Linux命令:netstat【监控TCP/IP网络,可以显示路由表、实际的网络连接以及每一个网络接口设备的状态信息】【TCP的11种状态】

netstat命令是一个监控TCP/IP网络的非常有用的工具,它可以显示路由表、实际的网络连接以及每一个网络接口设备的状态信息。 netstat [选项] 选项描述-a显示所有网络连接和监听的所有端口。-b显示创建每个连接或者监听商品的相关可执行程序。有时候有些已知的可执行…

参数传递和重定向

目录 1、参数传递 方法一 (1)修改路由配置, 主要是router下的index.js中的 path 属性中增加了 :id 这样的占位符 (2)视图层传递参数 (3)接收参数 (4)测试 方法二(…

2022年中国研究生数学建模竞赛A题——移动场景超分辨定位问题

目录一、题目原文1、背景2、研究现状3、待解决的问题二、雷达基础知识三、解决方案一、题目原文 1、背景 在日常家庭生活中,人们可能需要花费大量时间去寻找随意摆放在家中某些角落里的小物品。但如果给某些重要物品贴上电路标签,再利用诸如扫地机器人…

IS-IS(v4)协议分析

IS-IS协议分析 基本概述 工作原理 基本配置 一、基本概述 IS-IS(Intermediate System to Intermediate System,中间系统到中间系统)是ISO (International Organization for Standardization,国际标准化组织&#x…

BGP(边界网关)协议的介绍与配置

边界网关协议(BGP)是运行于 TCP 上的一种自治系统的路由协议。 BGP 是唯一一个用来处理像因特网大小的网络的协议,也是唯一能够妥善处理好不相关路由域间的多路连接的协议。 BGP 构建在 EGP 的经验之上。 BGP 系统的主要功能是和其他的 BGP 系…

无法打开源文件opencv2

目录 一般有三种情况: 没有下载opencv: 配置环境变量: 属性配置: 一般有三种情况: 1、没有下载opencv的库 2、下载但是没有配置系统的环境变量 3、以上二者都已完成,但当前项目(每一个新…

《Google软件工程》读书笔记

文章目录理论什么是软件工程时间与变化规模与效率权衡与成本软件工程 VS 编程文化如何更好地参与团队合作隐藏有害一切为了团队谷歌范儿知识共享学习的挑战知识共享的哲学设定基调:心理安全不断充实知识扩大提问渠道:向社区提问分享你的知识:…

青少年CTF-Web-Robots

题目信息题目名称:Robots 题目描述:昨天十三年社团讲课,讲了Robots.txt的作用,小刚上课没有认真听课正在着急,你能不能帮帮忙? 题目难度:一颗星 解题过程 访问题目链接浏览器里是空白的,题目名称是Robots,我们访问robots.txt看看。发现有个Disallow的f1ag_1n_the_h3re…

SpringSecurity学习笔记(九)RememberMe进阶

参考视频,编程不良人 前面我们介绍了rememberMe的实现原理,从中我们可以思考这样一个问题,如果我们的cookie被非法用户获取,然后携带这个cookie进行访问我们的项目中的内容,就会导致非法用户登录。这个问题怎么解决呢…

正则化方法笔记

能解决过拟合的方法都叫-正则化 L1和L2正则化只针对W进行正则化,减少过拟合,重点还是W。 权重W,可以理解为一个高维的向量,也可以理解为高维空间中的一个点,这个点到原点的距离,这个距离如果是欧氏距离&a…

(附源码)ssm模具配件账单管理系统 毕业设计 081848

ssm模具配件账单管理系统 摘 要 随着互联网趋势的到来,各行各业都在考虑利用互联网将自己推广出去,最好方式就是建立自己的互联网系统,并对其进行维护和管理。在现实运用中,应用软件的工作规则和开发步骤,采用Java技术…

牛客前端刷题(七)—— Node篇

还在担心面试不通过吗?给大家推荐一个超级好用的刷面试题神器:牛客网,里面涵盖了各个领域的面试题库,还有大厂真题哦! 赶快悄悄的努力起来吧,不苒在这里衷心祝愿各位大佬都能顺利通过面试。 面试专栏分享&a…

深入理解char* p,char a[]的区别

1、要深入理解char* p和char a[]的区别,我们先要把数组和指针搞明白。 数组,其实很好理解,在大多数的计算机语言里是这样定义的:多个类型相同的数据的有序集合。 指针,相对来说要复杂点,由于我之前有写…

知识点 - 协议大全

一 广域网通信技术协议 1.1 HDLC 协议 HDLC 协议的全称是高级链路控制协议(High Level Data Link Control),是一种在网上同步传输数据,面向比特的 数据链路层协议,广泛用于公用数据网,支持全双工或半双工…

【JAVA基础】*StringBuffer*:字符串的兄弟,你认识吗?

CSDN话题挑战赛第2期 参赛话题:学习笔记 字符串相关类StringBuffer一、*StringBuffer* 介绍二、方法详解1.构造方法①StringBuffer()②StringBuffer(int size)③StringBuffer(String str)2.增 StringBuffer append(...)3.删 StringBuffer delete(int start,int end)…