如何检查@Schedule注释(Spring 3.1)cron作业是否正在运行。

时间:2014-02-19 20:47:18

标签: java spring cron

在我的应用程序中,我有一个连接到FTP服务器并传输文件的cron作业,这是一个非常简单的功能,它使用spring @Schedule注释配置,并以cron表达式作为参数。 它运行良好几个月然后突然停止,得到了connectException。 可能是FTP服务器已关闭或发生了导致cron线程停止的事情。 我看了(谷歌)的原因,但没有得到任何(在日志中也没有多少 - 只是异常名称)。它可能是一次性的事情:)

我的问题是,我可以在@Schedule cron作业上放一些检查或观察者来知道它是否正在运行吗?

对不起我的错误解释/ english

由于

1 个答案:

答案 0 :(得分:1)

  

我的问题是,我可以在@Schedule上放一些支票或观察者吗?   cron工作要知道它是否正在运行?

基本上,你不能。

当您使用@Scheduled时,Spring使用ScheduledAnnotationBeanPostProcessor来注册您指定的任务(带注释的方法)。它用ScheduledTaskRegistrar注册它们。 ScheduledAnnotationBeanPostProcessorApplicationListener<ContextRefreshEvent>。当它从ContextRefreshEvent收到ApplicationContext时,会安排在ScheduledTaskRegistrar中注册的任务。

在此步骤中,这些任务的安排时间为TaskScheduler,通常会包裹ScheduledExecutorServiceIf an exception is uncaught in a submitted task, then the task is removed from the ScheduledExecutorService queue.

TaskScheduler类不提供检索计划任务的公共API ,即。 ScheduledFuture个对象。因此,您无法使用它来查明您的任务是否正在运行。

你可能不应该这样做。开发您的@Scheduled方法的任务,以便能够承受抛出的异常。有时,很明显,这是不可能的。例如,出现网络错误,您可能需要重新启动应用程序。如果不了解您的应用程序,我会说更多的日志记录是您最好的选择。