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

    文章

    9443

    浏览量

    156135
  • spring
    +关注

    关注

    0

    文章

    341

    浏览量

    15774
  • Boot
    +关注

    关注

    0

    文章

    154

    浏览量

    37485

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

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

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    硬件SPI两个CS操作两个norflash,怎么互斥操作两个norflash?

    硬件SPI两个CS操作两个norflash,怎么互斥操作两个norflash,norf
    发表于 09-26 06:18

    种TVS啥不同?

    当我们查看TVS二极管的规格书,常会看到以下种种引脚功能标识图:对于初学者,看到感到疑惑,他们一样吗?他们啥区别?为啥有的两个尖头往外,阳极连在一起,有的
    的头像 发表于 09-15 20:27 580次阅读
    这<b class='flag-5'>两</b>种TVS<b class='flag-5'>有</b>啥不同?

    基本半导体连获两个行业奖项

    近日,基本半导体凭借在碳化硅模块领域的突出表现,连获“国产SiC模块TOP企业奖”和“年度优秀功率器件产品奖”两个行业奖项。
    的头像 发表于 09-05 16:31 886次阅读

    看到STM8L152用两个IO用两个或非门检测两个通断,是什么原理呢?

    图中两个按键开关是两个干簧管,为什么不直接对GND设计来检测这个干簧管通断呢? 这样设计的原理是什么?
    发表于 06-12 06:25

    可能在 FX3 GPIF2 中创建两个独立的状态机吗?

    我想,如果我想通过 FX3 GPIF2 创建两个独立的传输流接口,我需要在 GPIF2 设计器中创建两个独立的状态机,我是否可能在 GPIF2 设计器中创建
    发表于 05-20 06:14

    请问imx8mp的LVDS0和LVDS1接口是否可以同时在两个屏幕上工作?

    请问 imx8mp 的 LVDS0 和 LVDS1 接口是否可以同时在两个屏幕上工作? 你什么例子吗?
    发表于 04-14 06:11

    使用THS1206时候两个问题求解

    各位专家,大家好,我在使用THS1206时候两个问题,麻烦您帮我解答一下: 1、在test mode下,我把CR0中的bit8和bit9设置为0、1时,即此时THS1206的输出应该是800H
    发表于 02-13 08:36

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

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

    ADS1198两个时钟,CLK和SCLK,这两个时钟信号能接在一起吗?

    最近在做这块芯片,看到两个时钟,CLK和SCLK,这两个时钟信号能接在一起吗,就是说CLK和SLCK能不能使用同一时钟信号?另外,关于芯片的SPI输入输出,要不要做一些初始化的工
    发表于 02-07 06:28

    在ADS828中两个输入管脚IN+和IN-,当两个管脚的都接不同的输入的时候,输入值是如何计算的啊?

    在ADS828中两个输入管脚IN+和IN-,当两个管脚的都接不同的输入的时候,输入值是如何计算的啊?是等于IN+的输入电压减去IN-的电压吗?
    发表于 02-06 06:25

    两个不同频率晶振靠的近会怎样

    晶振的振荡本质上是一种机械振动(在压电晶体层面)。当两个晶振靠得很近时,它们的机械振动可能会相互影响。一晶振的振动可能会通过电路板或者外壳等介质传递给另一晶振,从而改变另一晶振的
    的头像 发表于 01-20 13:55 2017次阅读
    <b class='flag-5'>两个</b>不同频率晶振靠的近会怎样

    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>

    如何把两个数据返回给调用函数

    已经知道函数会返回两个数据,提前申请两个元素的内存,并且把数组作为参数传递过去,把返回值放在数组中就行。 第三种,定义一全局的结构体变量,这样可以不用传参也不用返回,直接操作全局数据。 比较典型的错误写法
    的头像 发表于 01-08 10:15 678次阅读

    ADS7230两个电源和两个地,是不是意味着芯片内部模拟部分和数字部分是隔离的?

    ADS7230两个电源和两个地,是不是意味着芯片内部模拟部分和数字部分是隔离的?或者是非隔离,只做电平转换的?忘各位大侠解答,小弟不甚感激!!!
    发表于 01-08 08:21

    ADC124S021同时使用两个通道,两个通道的转换数据发生串扰怎么解决?

    用DSP的SPI接口接ADC124S021,如果只是进行单通道的信号采集,则转换后的数值稳定,但是同时使用两个通道时则两个通道的数据发生串扰现象。如,我单独使用2通道,则转换后数值稳定,但是如果
    发表于 12-30 07:41