使用场景
在应用程序开发过程中,往往我们需要在容器启动的时候执行一些操作。
Spring Boot中提供了CommandLineRunner和ApplicationRunner两个接口来实现这样的需求。
两个接口的不同
参数不同,其他大体相同,可根据实际需求选择合适的接口使用。
CommandLineRunner接口中run方法的参数为String数组,ApplicationRunner中run方法的参数为ApplicationArguments。
特殊的场景
在启动项目时,有时候我们所做的操作可能不是一次性的操作,有可能循环查询数据库,根据结果来处理不同的业务,亦或是监听消息队列……
遇到的坑
看下面一个例子,我们启动一个spring boot项目,正常启动情况下,项目启动后会打印启动时间。
如下图所示:
下面我们模拟一下启动项目时使用CommandLineRunner,有人说CommandLineRunner是项目启动完成后才调用的,我们看看现象。
再次启动spring boot 项目,看看日志,直接报错,启动异常了。
说明启动CommandLineRunner的执行其实是整个应用启动的一部分,没有打印最后的启动时间,说明项目是在CommandLineRunner执行完成之后才启动完成的。
此时CommandLineRunner的run方法执行的是一个循环,循环到第四次的时候,抛出异常,直接影响主程序的启动。
填坑
这样的问题该如何解决呢?
这个操作影响了主线程,那么我们是否可以重新开启一个线程,让他单独去做我们想要做的操作呢。
我们再看看这次的日志是什么样的:
此时CommandLineRunner执行的操作和主线程是相互独立的,抛出异常并不会影响到主线程。
程序打印了启动时间,并且CommandLineRunner中run方法报错后,应用程序并没有因为异常而终止。填坑成功。
原文链接:https://blog.csdn.net/zwq_zwq_zwq/article/details/81059017
责任编辑:lq6
-
接口
+关注
关注
33文章
9099浏览量
154339 -
spring
+关注
关注
0文章
341浏览量
15262 -
Boot
+关注
关注
0文章
153浏览量
36896
原文标题:什么?Spring Boot CommandLineRunner 有坑!?
文章出处:【微信号:AndroidPush,微信公众号:Android编程精选】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
有可能在 FX3 GPIF2 中创建两个独立的状态机吗?
可以驱动两个直流有刷电机、一个双极步进电机的双H桥电机驱动芯片-SS8833E

在ADS828中有两个输入管脚IN+和IN-,当两个管脚的都接不同的输入的时候,输入值是如何计算的啊?
EE-96:将两个AD73311编解码器与ADSP-218x接口

如何把两个数据返回给调用函数
ADC124S021同时使用两个通道,两个通道的转换数据发生串扰怎么解决?
用两个ADS1298连接采集ECG,两个器件的WCT具体要怎么连接,是否有一个器件的WCT可以悬空?
OMAPL137可以连接两个左右两个通道麦克风输入吗?
两个开关电源可以并联使用吗
单相电机两个绕组都在定子上吗
ad如何设置两个元器件的距离
sr锁存器特性表q为什么有两个值
功放机AB两个声道输出怎么接
LMK05318具有两个频域的超低抖动网络同步器时钟数据表

评论