不同的Quartz TriggerState枚举状态代表什么,如何设置它们?
我有一个Spring 3.1 Quartz 2.0.1实用程序,用于运行计划的作业。我的工作仅重复固定次数。我希望所有工作完成后,我的TriggerState变为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);
}
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>
最佳答案
通过查看代码,看起来TriggerState进入COMPLETE
状态,然后立即从所有跟踪哈希映射中删除。这就是scheduler.getTriggerState(triggerKey)
返回TriggerState.NONE
的原因-当与triggerKey
对应的触发器不存在时,返回此状态。
因此,要检查触发器的完成情况,可以执行以下操作:
if ((triggerState == TriggerState.COMPLETE) || (triggerState == TriggerState.NONE)) {
// do stuff }
要么
使用自定义的
TriggerListener
,该触发器在触发完成后会执行某些操作。