2012-02-21 18 views
2

不同的Quartz TriggerState枚舉狀態代表什麼,它們如何設置?不同的Quartz TriggerState枚舉狀態代表什麼?

我有一個Spring 3.1 Quartz 2.0.1實用程序用於運行計劃任務。我的工作只重複固定的次數。我期望當所有的工作都完成後,我的TriggerState會完成。但是,我發現它從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); 
} 

作業配置在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> 

回答

2

從看代碼,它看起來像TriggerState去COMPLETE狀態,然後立即從全部拆除跟蹤哈希映射。這就是爲什麼scheduler.getTriggerState(triggerKey)返回TriggerState.NONE - 當對應於triggerKey的觸發器不存在時,將返回此狀態。

所以,檢查觸發的完成,這是可以做到的:

if ((triggerState == TriggerState.COMPLETE) || (triggerState == TriggerState.NONE)) { // do stuff }

OR

使用自定義TriggerListener,做事情觸發完成時。