最好的产品网站建设,成都网站建设推来客,网页设计与网站建设实训目的,西安教育平台网站建设今天其他组的一个程序在k8s中启动报错#xff0c;启动之后立马就关闭了。我去看日志#xff0c;发现最后面报了一个UnknownHostException异常#xff0c;感觉是这个原因导致的#xff0c;然后查看异常栈。定位到一个CommandLineRunner接口实现类#xff0c;这个实现类里面…今天其他组的一个程序在k8s中启动报错启动之后立马就关闭了。我去看日志发现最后面报了一个UnknownHostException异常感觉是这个原因导致的然后查看异常栈。定位到一个CommandLineRunner接口实现类这个实现类里面写了一个企业微信通知已经启动的代码代码中发送了post请求但是没有用try包裹起来。 我自己这组的项目也有类似的功能不过我的实现是通过新建一个线程在里面编写通知的代码所以就算报错也不会导致程序关闭其实我写的时候是不知道这里面抛出异常会导致程序关闭的只能说碰巧了。 后面测试发现实现了CommandLineRunner接口或者实现ApplicationRunner接口的类只要在run方法里面发生了异常不管是不是运行时异常并且没有捕获的话就会导致程序关闭。
springBoot项目启动之后会执行SpringApplication中的run方法初始化一些参数之后会调用callRunners方法这个方法就是去执行实现了CommandLineRunner或ApplicationRunner接口的实现类run方法注意这个方法被try包裹。 callRunners里面的代码比较简单就是找到实现了那两个接口的bean对象然后调用callRunner方法callRunner方法里面就是调用我们重写的run方法如果调用发生异常异常会被抛出去。 调用callRunners报错之后会进入catch块中执行handleRunFailure方法handleRunFailure方法里面会调用关闭的方法