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

    文章

    7640

    浏览量

    148512
  • spring
    +关注

    关注

    0

    文章

    332

    浏览量

    14161
  • Boot
    +关注

    关注

    0

    文章

    142

    浏览量

    35253

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

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

收藏 人收藏

    评论

    相关推荐

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

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

    STM32MP157两个A7核能跑两个系统吗?

    请问STM32MP157的两个A7核,能像其它双核CPU一样运行AMP模式:一核跑Linux、一核跑RTOS(或禅机)吗?虽然M4
    发表于 03-21 06:50

    PSOC同时使用两个Em_EEPROM,数据会丢失的原因?

    PSOC同时使用两个Em_EEPROM,现在发现有一数据会丢失,想查看两个Em_EEPROM的起始地址和结束地址,在哪里可以看的到?
    发表于 02-21 07:20

    CYW54591 SoC两个物理独立的wifi接口吗?

    关于 CYW54591的问题。 这个 SoC 两个物理独立的 wifi 接口吗? 这意味着单独的 MAC 地址以及像
    发表于 01-23 07:28

    NUC472能够配置成两个独立的usb接口吗?

    NUC472的引脚配置中,除了USB0,还有USB1(USB1_D+ 和USB1_D-),能够配置成两个独立的usb接口么?
    发表于 01-17 06:26

    Scale iir和Vector iir两个函数什么区别?哪个用的多?

    Scale iir 和 Vector iir两个函数什么区别, 哪个用的多,比较好,求大神解答
    发表于 11-29 07:30

    CAN总线两个120Ω的终端电阻,为什么什么不用一60R的?

    CAN总线两个120Ω的终端电阻,什么不用一60R的?
    发表于 10-27 06:58

    STM8S003和STM8S103两个主控什么区别?

    STM8S003和STM8S103两个主控什么区别
    发表于 10-11 08:32

    怎么判断两个电气设备是完全隔离的?

    什么办法可以测量两个设备是隔离的吗
    发表于 10-11 07:03

    SG6服务器两个网卡,但是电口和两个光口具体应该怎么连接?

    SG6服务器两个网卡,但是电口和两个光口,具体应该怎么连接
    发表于 09-19 07:25

    使用NUC472的两个USB与PC连接

    应用程序: 本代码使用两个 USB 接口执行 USB 中心 。 BSP 版本: NUC472系列 BSP CMSIS V3.03.000 硬件: Nu-LB-NUC472 本示例代码
    发表于 08-22 08:30

    请问FIFO IP与RAMFIFO IP何不同?

    FIFO IP与RAMFIFO IP何不同?
    发表于 08-11 10:52

    两个HPM6750之间是否可以通过IO进行并行通信?通信案例吗?

    两个HPM6750之间是否可以通过IO进行并行通信?通信案例
    发表于 05-26 08:02

    是否示例代码显示如何使用FlexIO同时读取两个或多个引脚?

    是否示例代码显示如何使用 FlexIO 同时读取两个或多个引脚? 我兴趣在一时钟上读取多个 ADC 并输出到 DAC。
    发表于 05-19 10:03

    FPGA系统设计中,如果用两个FPGA工作,应该如何设计片之间的通信?

    FPGA系统设计中,如果用两个FPGA工作,应该如何设计片之间的通信?从片的配置和时钟输入与主片何不同?一做主片用于数据处理和控制,一
    发表于 05-08 17:18