不同的 Quartz TriggerState 枚举状态代表什么?

Vic*_*sky 4 java quartz-scheduler

不同的 Quartz TriggerState 枚举状态代表什么以及它们如何设置?

我有一个用于运行预定作业的 Spring 3.1 Quartz 2.0.1 实用程序。我的工作只重复固定的次数。我希望我的 TriggerState 在所有工作完成后进入 COMPLETE。但是,我看到它从 NORMAL 变为 NONE,而我从未看到 COMPLETE。我找不到太多关于 TriggerState 行为的文档。

相关Java代码:

SchedulerFactory schedFactory = new StdSchedulerFactory();

Scheduler scheduler =  = schedFactory.getScheduler();
scheduler.scheduleJob(jobDetail, trigger);
scheduler.start();

while (System.in.available() == 0) {
    // Get trigger state
    TriggerState triggerState = scheduler.getTriggerState(triggerKey);
    if ((triggerState == TriggerState.COMPLETE)) {
        break;
    }
    // Sleep for 100 msec
    Thread.sleep(SCHEDULER_SLEEP_TIME);
}
Run Code Online (Sandbox Code Playgroud)

Spring xml 中的作业配置:

<bean id="mockJobDetail"
      class="org.springframework.scheduling.quartz.JobDetailFactoryBean">
  <property name="jobClass"
            value="mypackage.MockJob"/>
</bean>

<bean id="simpleMockJobTrigger"
      class="org.quartz.impl.triggers.SimpleTriggerImpl" >
  <property name="name" value="simpleMockJobTrigger" />
  <!-- run every 50 milliseconds and start immediately, run 3 times -->
  <property name="repeatInterval" value="50" />
  <property name="startTime">
    <bean factory-bean="dateFormat" factory-method="parse">
      <constructor-arg value="2012-01-01" />
    </bean>
  </property>
  <property name="repeatCount" value="2" />
</bean>
Run Code Online (Sandbox Code Playgroud)

Vic*_*sky 6

从代码来看,看起来 TriggerState 进入COMPLETE状态,然后立即从所有跟踪哈希映射中删除。这就是为什么scheduler.getTriggerState(triggerKey)返回TriggerState.NONE——当对应的触发器triggerKey不存在时返回此状态。

因此,要检查触发器的完成情况,可以执行以下操作:

if ((triggerState == TriggerState.COMPLETE) || (triggerState == TriggerState.NONE)) {
  // do stuff }
Run Code Online (Sandbox Code Playgroud)

或者

使用TriggerListener在触发器完成时执行某些操作的自定义。