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

    文章

    7573

    浏览量

    148204
  • spring
    +关注

    关注

    0

    文章

    332

    浏览量

    14143
  • Boot
    +关注

    关注

    0

    文章

    142

    浏览量

    35142

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

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

收藏 人收藏

    评论

    相关推荐

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

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

    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

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

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

    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

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

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

    S32K148EVB-Q176如何同时使用两个LIN接口

    S32K148EVB-Q176,上面贴着 SCH-29644 REV B 的标签。看原理图,SBC 应该是 UJA1132HWF5V4。但在我的板上,芯片实际上标记为 UJA1131F5V0。 我想同时使用两个 LIN
    发表于 04-27 07:50

    FPGA系统设计中应该如何设计片之间的通信?

    ,拜托大家了! FPGA系统设计中,如果用两个FPGA工作,应该如何设计片之间的通信?从片的配置和时钟输入与主片何不
    发表于 04-23 11:31

    RT1052是否支持在同一工程中通过SEMC接口访问两个不同的设备?

    SEMC接口支持4种设备,我想确认以下问题:1、是否支持在同一工程中通过SEMC接口访问两个不同的设备,比如外接SDRAM插件,外接SRAM,同一
    发表于 04-17 08:23

    i.MX RT1052处理器是否支持在同一工程中通过SEMC接口访问两个不同的设备?

    SEMC接口支持4种设备,我想确认以下问题:1、是否支持在同一工程中通过SEMC接口访问两个不同的设备,比如外接SDRAM插件,外接SRAM,同一
    发表于 04-17 06:51

    MPC5777C两个重叠的MMU条目,MPC将如何解释这两个条目?

    关于 MPC5777C 中 MMU 设置的问题。如果我们两个重叠的 MMU 条目(*),MPC将如何解释这两个条目?他们会被视为签
    发表于 04-14 08:00

    三相电机用两个倒顺开关两个位置控制怎么接呢?

    三相电机用两个倒顺开关两个位置控制怎么接呢?哪些接法呢?
    发表于 03-30 11:54

    如何用IMXRT1176同时运行两个PAL摄像机?

    不同的解码器(ADV7280M 或 TVP5150)。第一具有 MIPI-CSI,最后一具有 8 位并行 CSI 接口以使用每个外设。另外,我
    发表于 03-30 07:12