在我的应用程序中,我有一个连接到FTP服务器并传输文件的cron作业,这是一个非常简单的功能,它使用spring @Schedule注释配置,并以cron表达式作为参数。 它运行良好几个月然后突然停止,得到了connectException。 可能是FTP服务器已关闭或发生了导致cron线程停止的事情。 我看了(谷歌)的原因,但没有得到任何(在日志中也没有多少 - 只是异常名称)。它可能是一次性的事情:)
我的问题是,我可以在@Schedule cron作业上放一些检查或观察者来知道它是否正在运行吗?
对不起我的错误解释/ english
由于
答案 0 :(得分:1)
我的问题是,我可以在@Schedule上放一些支票或观察者吗? cron工作要知道它是否正在运行?
基本上,你不能。
当您使用@Scheduled
时,Spring使用ScheduledAnnotationBeanPostProcessor
来注册您指定的任务(带注释的方法)。它用ScheduledTaskRegistrar
注册它们。 ScheduledAnnotationBeanPostProcessor
是ApplicationListener<ContextRefreshEvent>
。当它从ContextRefreshEvent
收到ApplicationContext
时,会安排在ScheduledTaskRegistrar
中注册的任务。
在此步骤中,这些任务的安排时间为TaskScheduler
,通常会包裹ScheduledExecutorService
。 If an exception is uncaught in a submitted task, then the task is removed from the ScheduledExecutorService
queue.
TaskScheduler
类不提供检索计划任务的公共API ,即。 ScheduledFuture
个对象。因此,您无法使用它来查明您的任务是否正在运行。
你可能不应该这样做。开发您的@Scheduled
方法的任务,以便能够承受抛出的异常。有时,很明显,这是不可能的。例如,出现网络错误,您可能需要重新启动应用程序。如果不了解您的应用程序,我会说更多的日志记录是您最好的选择。