【问题标题】:Having quartz execute a job only in one thread when there are multiple quartz threads当有多个石英线程时,让石英仅在一个线程中执行作业
【发布时间】:2011-10-18 14:44:03
【问题描述】:

我想知道是否可以将石英配置为在任何给定时间仅在一个线程中运行的长时间处理作业。换句话说,假设我的石英配置了大小为 5 的 SimpleThreadPool。我有一个每 10 秒触发一次的作业,但在某些情况下可能需要超过 10 秒才能完成。有没有办法配置石英触发器/作业/调度程序,以便该触发器不会再次触发,因为它已经在另一个线程中处于运行状态。当触发器再次触发时,池中的另一个线程将拾取它并同时运行同一作业的两个实例。感谢您的意见。

澄清:(关于使用大小为 1 的线程池的建议)。要求是为线程池配置 5 个线程,并且任何单个作业在任何给定时间只能在单个线程中执行,换句话说,作业的实例应该由一个线程执行。

【问题讨论】:

  • 将池大小减小到 1 怎么样?

标签: java quartz-scheduler


【解决方案1】:

设置

org.quartz.threadPool.threadCount=1

一次会有一个石英工作线程

【讨论】:

    【解决方案2】:

    如果您使用的是 Quartz 1.x,请让 Job 类实现 StatefulJob。如果您使用的是 Quartz 2.x,则将 @DisallowConcurrentExecution 注释添加到作业类。

    【讨论】:

    • 如果作业是泛型类我们该怎么办?这应该在作业详细信息中定义。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-13
    • 1970-01-01
    • 1970-01-01
    • 2011-01-30
    • 1970-01-01
    相关资源
    最近更新 更多