Spring Boot CommandLineRunner和ApplicationRunner

在本快速教程中,我们将探索Spring Boot中两个非常流行的界面: CommandLineRunnerApplicationRunner

这些接口的一种常见用例是在应用程序启动时加载一些静态数据。 虽然,我看到这种用法主要用于测试数据设置。

它们都是带有run()方法的功能接口。 Run()方法在ApplicationContext加载之后和SpringApplication#run方法执行结束之前立即执行。

我们可以在CommandLineRunner的run()方法中以原始String的形式访问应用程序参数。

让我们借助示例来看看。

首先,让我们编写一个实现CommandLineRunner接口的bean:

 @Component  public class SampleCmdRunner implements CommandLineRunner {  private static final Logger LOG = LoggerFactory.getLogger(SampleCmdRunner. class );    @Override public void run(String[] args) { LOG.info( "Executing the command line runner, Application arguments: " + Arrays.toString(args)); }  } 

现在,让我们引导我们的Spring Boot应用程序可执行jar

 java -jar SampleApp- 1.0 .jar parameter1 parameter2 parameter3 

以及三个命令行参数: parameter1,parameter2parameter3

我们的控制台日志将是:

 sbcetTomcatEmbeddedServletContainer : Tomcat started on port(s): 8080 (http)  Executing the command line runner, Application arguments: [parameter1, parameter2, parameter3]  2019 - 09 - 02 11 : 02 : 10.111 INFO 7676 --- [main] com.programmergirl.SampleApp : Started SampleApp in 2.11 seconds 

列出所有提供的参数的位置。

类似地,我们可以定义实现ApplicationRunner接口的bean:

 @Component  public class SampleAppRunner implements ApplicationRunner {     private static final Logger LOG = LoggerFactory.getLogger(SampleAppRunner. class );     @Override public void run(ApplicationArguments args) { LOG.info( "Executing SampleAppRunner" ); }   } 

ApplicationRunner提供对ApplicationArguments的访问,而不仅仅是原始String参数。 从技术上来讲,这是它们之间的唯一区别。

有多少

我们可以根据需要自由定义任意数量的CommandLineRunnerApplicationRunner实现。

Java 8定义:

使用Java 8 lambda, 我们可以有一个代码:

 @SpringBootApplication  public class SampleApp {  public static void main(String[] args) { SpringApplication.run(SampleApp. class , args); }  @Bean CommandLineRunner commandLineRunner() { return args -> System.out.println( "CommandLineRunner with args:" + Arrays.toString(args)); }  @Bean ApplicationRunner applicationRunner() { return args -> System.out.println( "ApplicationRunner with args:" + Arrays.toString(args.getSourceArgs())) }  } 

它在我们的Application类本身中定义了这些接口的实现。

订购:

我们还可以使用@Order注释对这些bean的执行施加顺序。

说,我们有两个CommandLineRunner实现:

 @Component  @Order ( 1 )  public class CmdRunner1 implements CommandLineRunner { private static final Logger LOG = LoggerFactory.getLogger(CmdRunner1. class );     @Override public void run(String[] args) { LOG.info( "In CmdRunner1" ); }  }   @Component  @Order ( 3 )  public class CmdRunner2 implements CommandLineRunner {  private static final Logger LOG = LoggerFactory.getLogger(CmdRunner2. class );     @Override public void run(String[] args) { LOG.info( "In CmdRunner2" ); }  } 

连同实现ApplicationRunner的类

 @Component  @Order ( 2 )  public class AppRunner implements ApplicationRunner { private static final Logger LOG = LoggerFactory.getLogger(AppRunner. class );  @Override public void run(ApplicationArguments args) { LOG.info( "In AppRunner" ); }  } 

显然,我们的CmdRunner1将首先执行,然后是AppRunner ,最后是CmdRunner2。

结论:

在本教程中,我们讨论了Spring Boot提供的CommandLineRunnerApplicationRunner接口。

翻译自: https://www.javacodegeeks.com/2019/09/spring-boot-commandlinerunner-and-applicationrunner.html

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

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

相关文章

visualvm远程jvm_如何使用VisualVM监视服务器上的多个JVM

visualvm远程jvm在上一篇文章中,我向您展示了如何使用单个管理员服务器和多个托管服务器启动WebLogic Server。 这些启动之后,您如何检查它们的健康状况? 您可以使用管理员的/ console网络应用。 但是,所有默认Oracle / Open JDK …

[渝粤教育] 西南石油大学 岩体力学 参考 资料

教育 -岩体力学-章节资料考试资料-西南石油大学【】 第一章测试 1、【单选题】大部分岩体属于( )。 A、均质连续材料 B、非均质材料 C、非连续材料 D、非均质、非连续、各向异性材料 参考资料【 】 2、【单选题】岩石的弹性模量一般指( &…

如何区别标准POE交换机和非标POE交换机

通俗的说,POE交换机就是支持网线供电的交换机,其不但可以实现普通交换机的数据传输功能还能同时对网络终端进行供电。那么,我们该如何来区别如何区别标准POE交换机和非标POE交换机呢?接下来我们就跟随飞畅科技的小编一起来详细看看…

[渝粤教育] 西安电子科技大学 工程制图与计算机绘图 参考 资料

教育 -工程制图与计算机绘图-章节资料考试资料-西安电子科技大学【】 *****单元测验–国家制图标准的基本规定 1、【单选题】绘图比例包括原值、放大比例、缩小比例,优先选择: A、原值 B、缩小比例 C、放大比例 D、无所谓 参考资料【 】 2、【单选题】细…

Spring Boot退出代码–创建自定义退出代码

当运行Spring Boot应用程序时,一切正常,我们将获得系统退出代码0 。 对于任何未处理的异常,应用程序将返回退出代码1 。 我们有可能从Spring Boot应用程序返回自定义退出代码。 在本教程中,我们将学习如何做。 实现 让我们从创建…

[渝粤教育] 郑州升达经贸管理学院 大学英语混合式课程 参考 资料

教育 -大学英语混合式课程-章节资料考试资料-郑州升达经贸管理学院【】 Quiz 1、【多选题】According to the clip, what are the major sources of the English words?(从电影中,你了解到英语词汇主要来自于哪些语言?) A、Latin B、Japanese C、Greek …

如何挑选一款合适的POE工业级交换机?

由于工业级交换机能够耐受各种比较苛刻的作业环境,而且产品系列多,端口装备灵敏,能够满足各种工业操控范畴的运用需求,因此在电力、冶金、石化、环保、交通、建筑等行业领域应用非常的广泛,各行各业信息化的建造对工业…

建设IPTV电视系统是否有必要?

随着信息化、智能化时代的发展,传统意义上的竞争方式和经营管理模式都在经营变革,建设IPTV电视系统及方案是否有必要? 下面我们先以几个场所为例,看看建设IPTV电视系统到底有什么用? 酒店 统一前端管理,方…

[渝粤教育] 郑州航空工业管理学院 航空概论 参考 资料

教育 -航空概论-章节资料考试资料-郑州航空工业管理学院【】 第1部分单元作业 第1部分单元测验 1、【单选题】航空是指载人或不载人的飞行器在地球 的航行活动。 A、高空 B、大气层内 C、宇宙 D、大气层外 参考资料【 】 2、【单选题】轻于空气的航空器靠 升空。 A、与空气相对…

高效的企业测试-工作流和代码质量(4/6)

本文的这一部分将讨论在开发过程中拥有有效工作流程的影响,以及适当的测试代码质量如何使我们能够创建可维护的测试,尤其是对于复杂项目。 开发工作流程和管道 编程是一项流程活动,我们开发人员应该对保持工作流程高效和缩短周转时间感兴趣…

飞畅科技-图解交换机接口及连接方式

局域网交换机作为局域网的集中连接设备,它的接口类型是随着各种局域网和传输介质类型的发展而变化的,交换机的许多接口与路由器接口完全一样。接下来就由杭州飞畅的小编来为大家介绍下交换机的接口类型以及连接方式有哪些?一起来看看吧&#…

[渝粤教育] 重庆工业职业技术学院 汽车安全与舒适系统维修 参考 资料

教育 -汽车安全与舒适系统维修-章节资料考试资料-重庆工业职业技术学院【】 认识汽车数据总线系统 1、【单选题】开发CAN总线的公司是 A、西门子 B、摩托罗拉 C、BOSCH D、爱立信 参考资料【 】 2、【单选题】本地内部连接网络,又称“局域子系统”的英文缩写是 A、L…

什么是有线电视系统?有线电视系统的组成部分是什么?

有线电视是通过同轴电缆、光缆为主要传输媒介,向用户传送本地、远地及自办节目的电视广播数据通信系统。有线电视既可以传输模拟电视信号也可以用来传输数字电视信号。 有线电视系统主要由信号源、前端部分、干线传输部分和分配部分组成。 1、信号源接收部分&…

分而治之_编写干净的测试–分而治之

分而治之好的单元测试应该仅出于一个原因而失败。 这意味着适当的单元测试仅测试一个逻辑概念。 如果我们要编写干净的测试,则必须识别那些逻辑概念,并且每个逻辑概念只编写一个测试用例。 这篇博客文章描述了我们如何识别从测试中发现的逻辑概念&…

[渝粤教育] 长沙航空职业技术学院 液压与气动技术 参考 资料

教育 -液压与气动技术-章节资料考试资料-长沙航空职业技术学院【】 随堂测-液压传动原理 1、【单选题】液压传动是以液体的( )能来传递动力的。 A、化学能 B、动能 C、势能 D、压力能 参考资料【 】 2、【单选题】液压传动是以( )…

万兆交换机与千兆交换机的区别有哪些?

交换机的发展经历了百兆、千兆,随着广大用户对数据传输要求的提高,因此有了现如今万兆交换机。百兆交换机正在逐步退出舞台,但是千兆交换机与万兆交换机的使用情况不相上下,那么,在什么情况下我们应该选择千兆交换机&a…

酒店电视方案 酒店建设高清数字电视系统的解决方案

近年来,随着互联网的发展,数字电视系统已经成为趋势。酒店作为旅游休闲的重要场所,为宾客提供高清的电视信号是非常有必要的。数字电视接入系统是宾客了解酒店资讯、观看电视电影、进行娱乐放松等的重要载体,其电视信号的质量对于…

将Spring Boot应用程序与Amazon Cognito集成

在本文中,我们将展示如何使用Spring Security 5.0中引入的OAuth 2.0客户端库 ,在Spring Boot应用程序中为身份验证用户使用Amazon Cognito服务。 什么是AWS Cognito? Amazon Cognito是由AWS提供的服务,除了提供对访问AWS服务的授…

【渝粤教育】国家开放大学2018年春季 7402-22T社会问题 参考试题

试卷编号:7402 座位号 2017——2018学年度第二学期期末考试 社会问题 试题 2018年7月 答题框: 1.社会问题研究的( )功能是回答社会问题是怎样的。 A、描述性研究 B、解释性研究 C、预测性研究 D、规范性研究 2&#…

网管型工业以太网交换机的几种管理方式

网管型工业交换机按其字面上的意思就是可以网络管理的交换机,管理方式有三种,可通过串口管理、可通过Web管理、通过网管软件管理,提供了基于终端控制口(Console)、基于Web页面以及支持Telnet远程登录网络等多种网络管理方式。因此网络管理人员…