使用场景
在应用程序开发过程中,往往我们需要在容器启动的时候执行一些操作。
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
连续3年!中国信通院发布自动驾驶政策蓝皮报告
应对超低功耗挑战,1.2V NOR Flash成各家必争之地
CEVA新技术推动大疆无人机加速进步
疫情对于智慧城市有什么挑战
一文详解集电极开路
CommandLineRunner和ApplicationRunner两个接口有何不同?
当主机进入第九世代,独占游戏还有戏吗?
华为海思芯片麒麟1100,将于2021年实现量产
优傲机器人公司推出了有效载荷达16公斤的协作机器人
兆芯与百度飞桨互相认证 国产CPU助力AI应用创新
库克终于感受到中国的冬天了,李彦宏的“冰与火”还有多久?
PI与Cypress联合推出Type C+PD快充参考设计,负载端效率大于87%
TI推出具有集成FET的最新全集成10A同步降压转换器--T
中国成为全球最大物联网市场,制造业依旧是最大行业
静电对LED显示屏产生危害有多大?
高性能转换器的设计
耐压测试仪的工作原理是什么
西门子S7-300PLC在汽车发动机装配线中的应用
工信部出手了!解决5G基站与其他无线电台干扰问题
如何有效构建固体电解质的高亲锂界面?