问题:
spring boot 中通过注解 @Scheduled 定义了定时函数 ,但是运行一会就会停止运行
原因:
一般都是执行Scheduled任务的过程出现了线程等待或者死循环等问题,导致 Scheduled任务停止。
如果定义了多个Scheduled任务,那么一个Scheduled任务中有线程等待或者死循环,就会导致所有的Scheduled任务停止执行。
具体造成某一个Scheduled任务停止运行的原因比较多,得具体分析Scheduled任务中都有哪些操作,一般是Scheduled任务中有http请求操作,在Scheduled任务中有HttpClient程序去请求Server,却没有设置请求超时时间,当出现网络异常等状况导致请求中断,使该http链接未正常关闭,该请求线程会一直等待,导致Scheduled定时任务停止。
解决:
1.如果程序中定义了多个Scheduled,出现了Scheduled停止,那就要一个一个的注释掉Scheduled任务,分析哪个Scheduled任务中出现问题,然后具体分析有问题的Scheduled任务。
2.如果是Scheduled任务中有http请求,建议查看是否设置了请求超时时间。
参考:
1.Scheduled任务中有FTP请求导致Scheduled任务停止
https://blog.csdn.net/justin_bob/article/details/104611868
2.http 请求超时导致Scheduled任务停止