CommandLineRunner、ApplicationRunner 接口

什么是 SpringBoot 的 ApplicationRunner? 通过这个案例,我们展示了如何在应用启动后立即执行一些初始化逻辑。在这个特定场景中,帮助我们实现了定时任务的自动加载和启动,简化了应用的启动流程并提高了可维护性。 阅读详情

       如果我们想在项目启动后做一些事情(如加载定时任务,初始化工作),可以使用spring提供的CommandLineRunner、ApplicationRunner 接口,在容器启动成功后的最后一步回调(类似开机自启动)。

1. CommandLineRunner接口

/**
 * Interface used to indicate that a bean should <em>run</em> when it is contained within
 * a {@link SpringApplication}. Multiple {@link CommandLineRunner} beans can be defined
 * within the same application context and can be ordered using the {@link Ordered}
 * interface or {@link Order @Order} annotation.
 * <p>
 * If you need access to {@link ApplicationArguments} instead of the raw String array
 * consider using {@link ApplicationRunner}.
 *
 * @author Dave Syer
 * @see ApplicationRunner
 */
public interface CommandLineRunner {

	/**
	 * Callback used to run the bean.
	 * @param args incoming main method arguments
	 * @throws Exception on error
	 */
	void run(String... args) throws Exception;

}

多个CommandLineRunner可以被同时执行在同一个spring上下文中并且执行顺序是以order注解的参数顺序一致。

下面看一个demo:

@Order(2)
@Component
public class ServerStartedReport implements CommandLineRunner{
    @Override
    public void run(String... args) throws Exception {
    
        System.out.println("===========ServerStartedReport启动====="+ LocalDateTime.now());
    }
}

配置参数启动项目:
在这里插入图片描述
控制台打印:

[ddd,tyy]
===========ServerStartedReport启动=====2019-02-14T21:31:30.466

2. ApplicationRunner接口

       二者基本一样,区别在于接收的参数不一样。CommandLineRunner的参数是最原始的参数,没有做任何处理,而ApplicationRunner的参数是ApplicationArguments,对原始参数做了进一步的封装。
如我们在这里配置了一些启动参数--foo=hu --log=debug
在这里插入图片描述
CommandLineRunner只是获取--name=value。而ApplicationRunner可以解析--name=value,使得我们可以直接通过name来获取value。

import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.stereotype.Component;

import java.util.Arrays;

@Component
public class MyApplicationRunner implements ApplicationRunner{

    @Override
    public void run(ApplicationArguments args) throws Exception {
        System.out.println("ApplicationRunner:"+ Arrays.asList(args.getSourceArgs()));
        System.out.println("getOptionNames:"+args.getOptionNames());
        System.out.println("getOptionValues:"+args.getOptionValues("foo"));
        System.out.println("getOptionValues:"+args.getOptionValues("log"));
    }
}

打印结果为:

===========ServerStartedReport启动=====2019-02-14T21:36:23.668
ApplicationRunner:[--foo=hu, --log=debug]
getOptionNames:[log, foo]
getOptionValues:[hu]
getOptionValues:[debug]

注意启动后执行的方法一定要加try catch,因为此处抛出异常会影响项目启动。

SpringBoot CommandLineRunner:应用启动后执行代码 Spring Boot的CommandLineRunner接口为应用提供了一种优雅的机制,用于在启动完成后执行初始化代码。通过实现这一接口,开发者可以确保在应用对外提供服务前,必要的准备工作已经完成。结合@Order注解可以精确控制多个初始化任务的执行顺序,依赖注入机制使得各种服务组件可以在初始化过程中方便地使用。在实际应用中,CommandLineRunner可以用于数据迁移、缓存预热、连接测试等多种场景。 阅读详情

相关推荐

【Spring系列】应用启动后回调机制CommandLineRunner和ApplicationRunner接口

我还通过一些渠道整理了一些大厂真实面试主要有:蚂蚁金服、拼多多、阿里云、百度、唯品会、携程、丰巢科技、乐信、软通动力、OPPO、银盛支付、中国平安等初,中级,高级Java面试题集合,附带超详细答案,希望能帮助到大家。还有专门针对JVM、SPringBoot、SpringCloud、数据库、Linux、缓存、消息中间件、源码等相关面试题。《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

2401_84415234的博客 853

ApplicationRunner学习

1. 类型:接口 2. 方法:只定义了一个run方法 3. 使用场景: springBoot项目启动时,若想在启动之后直接执行某一段代码,就可以用 ApplicationRunner这个接口,并实现接口里面的run(ApplicationArguments args)方法,方法中写上自己的想要的代码逻辑。 !!!一定要加上@Component @Component public class ServerRunner implements ApplicationRunner { private

PhilsphyPrgram的博客 919

Python经常遇到导入xlwings就出错,如何解决

Python经常在导入xlwings时遇到错误。有人建议尝试重装或升级xlwings,但这些操作后仍然无法解决导入错误问题。

felix_8的博客 1740

【SpringBoot】中的ApplicationRunner接口 和 CommandLineRunner接口

EX:自定义两个类,实现CommandLineRunner接口,实现run方法,在run方法中添加处理逻辑。

m0_46459413的博客 8415

基于决策树的英雄联盟比赛胜负预测(含完整代码)

在代码中设置随机种子(例如 RANDOM_SEED = 2024)的主要目的是为了确保每次运行代码时,随机过程的结果是一致的。通过绘制不同参数组合下的准确率图,直观地展示了参数对模型性能的影响,帮助读者更好地理解和选择合适的参数。通过设置相同的随机种子(伪随机数),可以确保每次运行代码时,随机数生成器生成的随机数序列是相同的。如果在开发过程中遇到问题,设置固定的随机种子可以帮助你更容易地定位问题,因为每次运行代码时的数据和结果都是一样的。在科学研究和实验中,结果的可重复性是非常重要的。

oisflo的博客 1920

从POI兴趣点获取到ArcGIS中热力图制作

1. POI获取及坐标点转换 POI获取我们要借助下面这个网站↓↓↓ 规划云http://guihuayun.com/poi/ 搜索POI兴趣点并复制兴趣点, 图 新建txt文本文档,粘贴兴趣点 图片 查看后得知,lng为横坐标,lat为纵坐标 文件,另存为csv格式文件,编码为utf—8 打开QGIS,因为我们pol点是从百度地图上获取的,为BD09坐标系,与WGS84有一定偏移【GCJ02:火星坐标系,是由中国国家测绘局制订的地理信息系统的坐标系统。由WGS84坐标系经加密后的坐标系。 BD09:为.

qq_43173805的博客 5599

SpringBoot使用CommandLineRunner预加载数据

在使用SpringBoot构建项目时,我们通常有一些预先数据的加载。那么SpringBoot提供了一个简单的方式来实现–CommandLineRunner。 CommandLineRunner是一个接口,我们需要时,只需实现该接口就行。如果存在多个加载的数据,我们也可以使用@Order注解来排序。 案例: 分别定义了一个数据加载类MyStartupRunner1,排序为2;以及另一个数据...

米不开朗基罗的博客 2872

S32的进阶之路->3,S32DS新建/删除/导入工程

右击工程名,点击Delect进行工程删除。选中Delect project contents on disk则会彻底删除工程,不选中Delect project contents on disk工程文件会保存在工作空间中。在Improt Projects中选择工程所在文件夹,选中所需要导入的工程,勾选Copy projects into workspace。选中目标示例工程,点击Finish,完成创建工程。导入已有工程,右击右击Project Explorer空白处,选择Import。

LC_8575的博客 2227

CommandLineRunner或者ApplicationRunner接口

前言 CommandLineRunner、ApplicationRunner 接口是在容器启动成功后的最后一步回调(类似开机自启动)。 CommandLineRunner接口 官方doc: Interface used to indicate that a bean should run when it is contained within a SpringApplication. Multi...

384

Android性能分析深度指南:Perfetto工具全面解析

本文深入探讨Android性能优化工具Perfetto的应用与实践。作为Google推出的新一代追踪系统,Perfetto整合了CPU调度、内存分配、电池状态等多维度分析功能,通过高性能数据处理和可视化界面帮助开发者定位性能瓶颈。文章系统介绍了Perfetto的架构原理、配置方法和核心功能,包括CPU性能分析、内存泄漏检测等关键技术。通过电商应用卡顿优化的实战案例,展示了如何利用数学建模(如帧时间公式$T_{\text{render}}\leq16.67\text{ms}$)指导性能调优。

郑伟强dev的专栏 144

单片机:实现FFT快速傅里叶变换算法(附完整源码)

单片机:实现FFT快速傅里叶变换算法(附完整源码)

希望我的博客,能帮上你解决学习中工作中所遇到的问题 1104

CommandLineRunner与ApplicationRunner接口的使用及源码解析

引言我们在使用SpringBoot搭建项目的时候,如果希望在项目启动完成之前,能够初始化一些操作,针对这种需求,可以考虑实现如下两个接口(任一个都可以)org.sprin...

u010889990的专栏 1121

实战神器指标解析 篇四:主力吸筹指标及其分析和使用说明

主力可能会进行多次吸筹,因此需要根据黄色趋势线来判断是否有转强的变化。一旦出现转强的迹象,这通常意味着吸筹已经接近尾声,即将进入拉升前期。此时可以介入进行建仓。该股票指标通过分析价格变动的方式,能够精确跟踪并标识主力的吸筹行为。当底部出现多根洋红色柱子时,这通常表示出现了主力吸筹的指示。这段代码主要用于分析股票的底部吸筹情况、趋势和涨跌情况。

生活在别处 6233

CommandLineRunner和ApplicationRunner接口

如果在容器启动的时候需要读取配置文件或者数据库连接等操作,可以使用这两个接口来实现。 这两个接口分别为CommandLineRunner和ApplicationRunner,它们是在容器启动成功后的最后一步回调。 可以有多个实现,可以通过@Order(index)注解或Ordered接口来控制执行顺序,数字小的先执行,没有@Order注解的最后执行 如果同时存在ApplicationRunn...

wu8439512的专栏 855

《Zephyr OS 入门与实战》第5章:内存管理策略

【代码】《Zephyr OS 入门与实战》第5章:内存管理策略。

2301_79143213的博客 350

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Spring Boot - ApplicationRunner && CommandLineRunner扩展接口

Spring Boot - 扩展接口一览 接口也只有一个方法:如果有多个,可以利用@Order来进行排序, 按照中的value值从小到大依次执行。触发时机为整个项目启动完毕后(执行时机为容器启动完成的时候),自动执行。扩展此接口,进行启动项目之后一些业务的预处理。 继续 核心方法 OK, CLEAR CommandLineRunner

小工匠 3万+

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

SpringBoot之CommandLineRunner接口和ApplicationRunner接口

前言 Spring boot的CommandLineRunner接口主要用于实现在应用初始化后,去执行一段代码块逻辑,这段初始化代码在整个应用生命周期内只会执行一次。

AlbenXie的博客 874

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

SpringBoot中CommandLineRunner和ApplicationRunner接口解析和使用

应用及场景 SpringBoot中提供了两个接口可以在Spring Boot启动的过程中进行一些额外的操作,比如读取配置文件、数据库操作等自定义的内容。 而这些功能的实现也非常简单,直接实现这两个接口并实现其run方法,然后将该类实例化即可。以下代码便实现了CommandLineRunner接口,并在run方法内打印了对应的日志,同时,通过@Component将其注册为Spring的一个bean。...

程序新视界 4694

springBoot中CommandLineRunner与ApplicationRunner接口

springBoot提供这两个接口的问题是在容器加载完成之后执行一些动作如:处理某些特殊业务等。 不同之处在于:ApplicationRunner中run方法的参数为ApplicationArguments,而CommandLineRunner接口中run方法的参数为String数组。 当接口有多个实现类时,提供了@Order(value=整数值)注解实现从小到大依次自定义顺序执行,也可以实现...

weixin_38071106的博客 284

CommandLineRunner或ApplicationRunner接口

前言 CommandLineRunner和ApplicationRunner接口是在容器启动成功后的最后一步回调。 CommandLineRunner接口 接口被用作将其加入spring容器中时执行其run方法,多个CommandLineRunner可以被同时执行在同一个spring上下文中并且捃顺序是以order注解的参数顺序一致。 ApplicationRunner接口 以上面接口的...

金溪的博客 415

Spring boot 的 CommandLineRunner和ApplicationRunner接口

1,介绍 CommandLineRunner、ApplicationRunner 接口是在容器启动成功后的最后一步回调(类似开机自启动)。 一个项目可以有多个,优先级用@Order注解指定或者实现Ordered接口。 ApplicationRunner是对CommandLineRunner原始参数的进一步封装。 2,执行测试以及作用展示 可以获取启动参数中的指令 2.1 Applica...

MrLee的博客 777
上一篇: Mybatis的如何根据下划线_,百分号%模糊查询---escape的作用
下一篇: 从@Transactional看事务的传播和隔离
余生之君
博客等级 码龄10年 246粉丝 98原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值