2014-03-31 96 views
1

最近我已經開始與石英持續作業存儲具有以下屬性的工作:石英工作retrigerring服務器關閉

org.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreTX 
org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.PostgreSQLDelegate 

我在春天定義的樣本作業基於cron的觸發:

<bean id="sampleCronTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean"> 
    <property name="jobDetail" ref="sampleJobDetail"/> 
    <property name="cronExpression" value="0/5 * * * * ?"/> 

我看到工作真的每5秒執行一次,都很好。 現在我停止程序,這是一個簡單的控制檯應用程序,沒有任何Web容器,等待大約30秒鐘,然後重新運行我的程序。 我看到的是當調度程序啓動時,作業會被觸發很多次。 例如,如果作業是這樣實現的:右後

public class SampleJob implements Serializable, Job { 
@Override 
public void execute(JobExecutionContext context) throws JobExecutionException { 
    System.out.println("Executing the job Job " + new Date()); 
} 

}

輸出的重新啓動是這樣的:

Executing the job Job Mon Mar 31 08:34:18 IDT 2014 
Executing the job Job Mon Mar 31 08:34:18 IDT 2014 
Executing the job Job Mon Mar 31 08:34:18 IDT 2014 

,然後重新將工作每5秒鐘。

Executing the job Job Mon Mar 31 08:34:20 IDT 2014 
Executing the job Job Mon Mar 31 08:34:25 IDT 2014 

....

在實際應用中,我要實現的是將清理數據庫(當然它不會運行每5秒鐘:))的工作,但我做的計劃有時候服務器會重新啓動並且會停留一段時間,我希望這個工作在重新啓動後只執行一次。是否有可能這樣做?

我使用SchedulerFactoyBean以下配置:

<bean id="quartzSchedulerFactoryBean" class="org.springframework.scheduling.quartz.SchedulerFactoryBean" destroy-method="destroy"> 
    <property name="configLocation" value="classpath:scheduler-quartz.properties"/> 
    <property name="quartzProperties" ref="qrtzProperties"/> 
    <property name="autoStartup" value="true" /> 

    <property name="triggers"> 
     <list>    
      <ref bean="sampleCronTrigger"/> 
     </list> 
    </property> 
</bean> 

在此先感謝

+0

您使用的是org.springframework.scheduling.quartz.SchedulerFactoryBean嗎? – geoand

+0

是的,我在更新問題 –

+0

時安排夸脫它甚至會在應用程序啓動完成之前觸發事件。但通常這不會被注意到,但是在這裏你的應用程序在間隔5秒觸發,所以你注意到它。 !這就是我認爲 – Dileep

回答

3

您也可以嘗試設置以下屬性

<property name="overwriteExistingJobs" value="true"/> 
+0

非常感謝,geoand!這已經解決了問題(至少在POC層面)! –

+0

@MarkBramnik太棒了! – geoand

2

嘗試設置上sampleCronTrigger失火指令:

<property name="misfireInstructionName" value="MISFIRE_INSTRUCTION_DO_NOTHING"/> 

這裏是一個大文章約misfire instructions

+1

看起來它沒有解決問題。不過謝謝你指點我這個方向,我會繼續在這裏挖。 +10分肯定從我這裏:) –