0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

CommandLineRunner和ApplicationRunner两个接口有何不同?

Android编程精选 来源:CSDN 作者:狮子头儿 2021-07-04 10:42 次阅读

使用场景

在应用程序开发过程中,往往我们需要在容器启动的时候执行一些操作。

Spring Boot中提供了CommandLineRunner和ApplicationRunner两个接口来实现这样的需求。

两个接口的不同

参数不同,其他大体相同,可根据实际需求选择合适的接口使用。

CommandLineRunner接口中run方法的参数为String数组,ApplicationRunner中run方法的参数为ApplicationArguments。

特殊的场景

在启动项目时,有时候我们所做的操作可能不是一次性的操作,有可能循环查询数据库,根据结果来处理不同的业务,亦或是监听消息队列……

遇到的坑

看下面一个例子,我们启动一个spring boot项目,正常启动情况下,项目启动后会打印启动时间。

如下图所示:

poYBAGDhIauAazacAAES8GYxook272.jpg

下面我们模拟一下启动项目时使用CommandLineRunner,有人说CommandLineRunner是项目启动完成后才调用的,我们看看现象。

pYYBAGDhIcCAbjXTAAC-kw-u9nE692.jpg

再次启动spring boot 项目,看看日志,直接报错,启动异常了。

poYBAGDhIcyAdesaAAMP2XZPpwQ085.jpg

说明启动CommandLineRunner的执行其实是整个应用启动的一部分,没有打印最后的启动时间,说明项目是在CommandLineRunner执行完成之后才启动完成的。

此时CommandLineRunner的run方法执行的是一个循环,循环到第四次的时候,抛出异常,直接影响主程序的启动。

填坑

这样的问题该如何解决呢?

这个操作影响了主线程,那么我们是否可以重新开启一个线程,让他单独去做我们想要做的操作呢。

pYYBAGDhIdmANq8WAADMJg-q-6k628.jpg

我们再看看这次的日志是什么样的:

poYBAGDhIeKAEIBzAAExSe3vTYE626.jpg

此时CommandLineRunner执行的操作和主线程是相互独立的,抛出异常并不会影响到主线程。

程序打印了启动时间,并且CommandLineRunner中run方法报错后,应用程序并没有因为异常而终止。填坑成功。

原文链接:https://blog.csdn.net/zwq_zwq_zwq/article/details/81059017

责任编辑:lq6

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 接口
    +关注

    关注

    33

    文章

    8742

    浏览量

    152119
  • spring
    +关注

    关注

    0

    文章

    340

    浏览量

    14427
  • Boot
    +关注

    关注

    0

    文章

    150

    浏览量

    35987

原文标题:什么?Spring Boot CommandLineRunner 有坑!?

文章出处:【微信号:AndroidPush,微信公众号:Android编程精选】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    可以驱动两个直流刷电机、一双极步进电机的双H桥电机驱动芯片-SS8833E

    电机驱动芯片 - SS8833E是一种双桥电机驱动器,具有两个H桥驱动器,可以驱动两个直流刷电机、一双极步进电机、电磁阀或其他电感负载。
    的头像 发表于 02-12 09:43 67次阅读
    可以驱动<b class='flag-5'>两个</b>直流<b class='flag-5'>有</b>刷电机、一<b class='flag-5'>个</b>双极步进电机的双H桥电机驱动芯片-SS8833E

    EE-96:将两个AD73311编解码器与ADSP-218x接口

    电子发烧友网站提供《EE-96:将两个AD73311编解码器与ADSP-218x接口.pdf》资料免费下载
    发表于 01-13 16:32 0次下载
    EE-96:将<b class='flag-5'>两个</b>AD73311编解码器与ADSP-218x<b class='flag-5'>接口</b>

    ads1013两个模拟输入,可以接不同的两个模拟输入吗?

    ads1013两个模拟输入,可以接不同的两个模拟输入吗,驱动程序中怎么分别读两个模拟输入的转换结果?
    发表于 12-02 08:02

    OMAPL137可以连接两个左右两个通道麦克风输入吗?

    Hi!大家好!我一些问题:OMAPL137 Evm 技术手册上写有P4 Microphone In 接口是stereo microphone line input,如下图。 意思是可以连接两个
    发表于 10-29 06:04

    ad如何设置两个元器件的距离

    在Altium Designer(简称AD)中设置两个元器件之间的距离,主要是通过设置元器件间的安全间距(Clearance)规则来实现的。这个规则定义了元器件之间、元器件与走线之间以及其他设计元素
    的头像 发表于 09-02 15:31 9038次阅读

    sr锁存器特性表q为什么两个

    SR锁存器特性表中Q之所以两个值,是因为这些值分别代表了锁存器在不同输入条件下的状态。具体来说,Q的两个值分别对应了锁存器的“当前状态”(也称为“初态”或“现态”)和“新状态”(也称为“次态”或
    的头像 发表于 08-28 09:28 922次阅读

    功放机AB两个声道输出怎么接

    声道输出可以分别连接到组音箱上,以实现立体声效果。这种接线方式简单直接,适用于大多数家庭影院和音响系统。 接线步骤: 确认接口 :首先,确认功放机AB两个声道输出的接口类型(如RCA
    的头像 发表于 08-23 10:40 4440次阅读

    触发器的两个稳定状态分别是什么

    触发器作为数字电路中的基本逻辑单元,具有两个稳定状态,这两个状态通常用于表示二进制数码中的0和1。
    的头像 发表于 08-12 11:01 1690次阅读

    双稳态电路的两个稳定状态是什么

    双稳态电路是一种具有两个稳定状态的电子电路,广泛应用于数字电路、通信系统、存储器等领域。 双稳态电路的基本概念 双稳态电路是一种具有两个稳定状态的电路,即在没有外部输入信号的情况下,电路可以保持在
    的头像 发表于 08-11 15:00 1817次阅读

    双稳态触发器的两个基本性质是什么

    双稳态触发器(Bistable Trigger)是一种具有两个稳定状态的逻辑电路,广泛应用于数字电路设计中。它具有两个基本性质:记忆性和切换性。 一、双稳态触发器的基本概念 1.1 双稳态触发器
    的头像 发表于 08-11 10:08 854次阅读

    CYW4373E的两个clm_blob文件何不同?

    : \"cyfmac4373.clm_blob\" 和\"cyfmac4373-sdio.clm_blob\" clm_blob 文件。 请问这两个文件什么区别,哪个适用于 SDIO 接口
    发表于 05-31 15:32

    请问ad9171的两个输出端口是否支持同时输出两个不同的频率?

    你好,关于AD9171芯片我问题 ,数据手册显示该芯片具有两个输出通道,芯片内部DAC0和DAC1共两个DAC通道,那么这
    发表于 05-28 06:20

    两个铜片可以形成原电池吗

    两个铜片本身不能形成原电池,因为原电池的工作原理依赖于两个不同电位的电极材料之间的氧化还原反应。
    的头像 发表于 05-21 16:23 1223次阅读

    STM32有没有带两个USB FS接口的型号,求推荐?

    请教一下,STM32 的芯片,有没有带两个USB FS 接口的型号,推荐一下,非常感谢! 两个USB都需要做为主机使用。
    发表于 04-24 06:14

    arcgis中如何关联两个属性表

    在ArcGIS中,关联两个属性表是一重要的操作,可以通过此操作将两个表中的数据关联起来,以便进行分析和查询。下面是详细介绍如何在ArcGIS中实现属性表的关联。 首先,我们需要明确两个
    的头像 发表于 02-25 11:01 4543次阅读