最近我已經開始與石英持續作業存儲具有以下屬性的工作:石英工作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>
在此先感謝
您使用的是org.springframework.scheduling.quartz.SchedulerFactoryBean嗎? – geoand
是的,我在更新問題 –
時安排夸脫它甚至會在應用程序啓動完成之前觸發事件。但通常這不會被注意到,但是在這裏你的應用程序在間隔5秒觸發,所以你注意到它。 !這就是我認爲 – Dileep