【问题标题】:Quartz triggering same instance twiceQuartz 两次触发同一个实例
【发布时间】:2015-06-25 13:02:08
【问题描述】:

我们在 Java 类中使用 DisallowConcurrentExecutionAttribute 注释来防止多个实例的并发执行,但是,看起来 Quartz 已经同时触发了两次同一个实例。请解决此问题并向我们提供更多信息,如果是错误,请修复此问题。

@Override
@Transactional(propagation = Propagation.REQUIRED, readOnly = false)
public void execute(final JobExecutionContext jobExecutionContext) throws JobExecutionException {
    logger.log(Log.DEBUG, "++++ Quartz JOB BatchJobDetector started");
    try {
        this.setJobExecutionContext(jobExecutionContext);
        boolean triggerNextJob = true;
        while (triggerNextJob) {
            TriggeredBatchProcessDTO triggeredBatchProcessDTO = getNextJob(jobExecutionContext, 0);
            if (triggeredBatchProcessDTO != null) {

                triggerJobImmediatly(triggeredBatchProcessDTO.getId(), jobExecutionContext);
                triggeredBatchProcessDTO.setState(StatusType.RUNNING);  
                triggeredBatchProcessDTO.setProcessDtTm(triggeredBatchProcessDTO.getProcessDtTm());//CRGRO022
                updateTriggeredBatchProcessDTO(triggeredBatchProcessDTO);

            } else {
                triggerNextJob = false;
            }
        }
    } catch (final UnexpectedRuntimeException e) {
        logger.log(Log.ERROR, "Error during execution of TriggeredBatchProcessDetectorJob: " + e.getMessage(), e);
        throw e;
    } catch (final Throwable t) {
        throw new UnexpectedRuntimeException(CoreExceptionId.RUN_0001_UNEXPECTED_EXCEPTION,
            new Object[] { "TriggeredBatchProcessDetectorJob error" }, t);
    }
    logger.log(Log.DEBUG, "++++ Quartz JOB BatchDetector finished");
}

【问题讨论】:

  • 如果没有版本信息,代码 sn-p 触发问题等,帮助您有点困难......如果您希望其他人花时间回答您的问题,请增强它。干杯

标签: java quartz-scheduler


【解决方案1】:

您需要通过属性正确设置石英以将其运行到集群模式,我不确定,但恕我直言,您还应该使用 @PersistJobDataAfterExecution 注释。我在使用集群石英时也没有任何问题 StatefulJob。您需要向我们展示您的配置 - here is sample - 并提供石英库版本

【讨论】:

  • 我们也在使用这个注解@PersistJobDataAfterExecution,我对石英完全陌生,请你更具体一点或解释一下你在这里配置的确切含义,石英版本是 2.2.1跨度>
  • 如果我们谈论的是属性,例如: org.quartz.jobStore.isClustered = true org.quartz.scheduler.instanceName = MyClusteredScheduler org.quartz.scheduler.instanceId = AUTO 我的意思是配置在数据库或您的 JEE 容器上
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-22
  • 2018-07-20
  • 1970-01-01
  • 2013-08-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多