quartz-scheduler - Quartz - 如何关闭和重新启动调度程序?

标签 quartz-scheduler

我得到的调度程序如下:

StdScheduler schedulerBean = (StdScheduler) ApplicationContextUtil.getBean(schedulerBeanName);
schedulerBean.start();

然后
schedulerBean.shutdown();

在执行了一些其他代码之后,我再次调用 schedulerBean.start() 。

现在代码抛出错误-“org.quartz.SchedulerException:调用shutdown()后无法重新启动调度程序”

你能告诉我如何解决这个问题吗?

提前致谢,
卡西尔

最佳答案

一旦你关闭了一个调度程序,它就不能重新启动,因为线程和其他资源被永久破坏。

您可以阅读 Quartz Scheduler API references以便找到满足您需求的方法。您可以在下面找到一些可用的方法。

  • standby()方法。暂时停止调度程序触发触发器。当调用 start() 时(使调度程序退出待机模式),在 start() 方法执行期间将不会应用触发失火指令 - 任何失火将在之后立即检测到(由 JobStore 的正常进程) .
  • pauseJob(JobKey jobKey) - resumeJob(JobKey jobKey) .使用给定键暂停 JobDetail - 通过暂停其所有当前触发器。在 resumeJob(JobKey jobKey) 上,如果任何 Job'sTrigger 错过了一个或多个触发时间,则将应用 Trigger 的 misfire 指令。
  • interrupt(JobKey jobKey) .在此 Scheduler 实例中请求中断所有当前正在执行的已识别作业实例,该作业必须是 InterruptableJob 接口(interface)的实现者。如果当前正在执行已识别作业的多个实例,则将在每个实例上调用 InterruptableJob#interrupt() 方法。但是,有一个限制,如果一个实例上的 interrupt() 引发异常,所有剩余的实例(尚未被中断的)都不会调用它们的 interrupt() 方法。如果您希望中断作业的特定实例(当执行多个作业时),您可以通过调用 getCurrentlyExecutingJobs() 来获取作业实例的句柄,然后自己调用 interrupt() 来实现。此方法不支持集群。也就是说,它只会中断当前在此调度程序实例中执行的已识别 InterruptableJob 的实例,而不是跨整个集群。
  • unscheduleJob(TriggerKey triggerKey) .从调度程序中删除指示的触发器。如果相关作业没有任何其他触发器,并且该作业不持久,则该作业也将被删除。

  • 请注意,您可以创建一个实现 ServletContextListener 接口(interface)的监听器,以便:
  • 容器关闭时,所有作业都被中断,调度程序关闭
  • 创建调度程序并在容器启动时调度作业

  • 如果您想创建这样的监听器,我可以提供更多详细信息。

    我希望这有帮助。

    关于quartz-scheduler - Quartz - 如何关闭和重新启动调度程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15020625/

    相关文章:

    war 应用程序中的 Java 类加载器(jar/classloader hell) quartz

    .net - Quartz.NET 调度程序 - 在远程服务器上提交作业时出现错误 "Could not load file or assembly ' SimpleJob ...“

    java - 在 Java Scheduler Quartz Cron 中设置多个时区

    java - quartz - ClassCastException

    linux - 用于在不同时间以不同时间间隔运行作业的 Cron 表达式

    c# - 使用 SQL Server AdoJobStore 配置 Quartz.NET

    java - 在 quartz 调度程序中以固定延迟安排?

    java - 从 JSF(任何前端)触发 Quartz 作业 - 如何等待作业执行结束

    java - 停止 Java Quartz 调度程序

    java - quartz 调度程序,知道作业何时完成