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

标签 java spring cron

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

我的问题是我可以对 @Schedule cron 作业进行一些检查或观察以了解它是否正在运行吗?

抱歉我的解释不好/英语

谢谢

最佳答案

my question is that can I put some check or watcher on the @Schedule cron job to know whether it is running or not ?

基本上,你不能。

当您使用@Scheduled时,Spring使用ScheduledAnnotationBeanPostProcessor注册您指定的任务(带注释的方法)。它将它们注册为 ScheduledTaskRegistrarScheduledAnnotationBeanPostProcessorApplicationListener<ContextRefreshEvent> 。当它收到ContextRefreshEvent时来自ApplicationContext ,它调度在 ScheduledTaskRegistrar 中注册的任务。

在此步骤中,这些任务将按 TaskScheduler 进行计划。它通常包含 ScheduledExecutorServiceIf an exception is uncaught in a submitted task, then the task is removed from the ScheduledExecutorService queue.

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

你可能不应该这样做。制定您的任务,您的@Scheduled方法,能够承受抛出的异常。有时,显然这是不可能的。例如,出现网络错误时,您可能必须重新启动应用程序。在不了解有关您的应用程序的任何其他信息的情况下,我想说更多的日志记录是您最好的选择。

关于java - 如何检查@Schedule注释(Spring 3.1)cron作业是否正在运行。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21892072/

相关文章:

php - Cpanel Cron Job 没有完全运行我的 php 代码

java - runtime.getruntime.exec 无法识别可执行文件

包中带有 init() 的 Java 小程序?

java - 如何在 Spring Boot 应用程序中以 JSONObject 形式访问 MongoDB 文档

java - 由于在 EBS 中部署的 Tomcat 中的升级 header 无效,握手失败

android - 如何在 Android 中设置一个持久/定期的时间表?

java - 应用程序不会从光盘运行

java - java中线程初始化为null

java - JdbcTemplate 选择更新

ubuntu - 我如何编写一个 cronjob?