Nella mia applicazione Spring sto usando il SchedulerFactoryBean
da integrare con Quartz. Avremo cluster di istanze Tomcat e quindi voglio avere un ambiente Quartz in cluster, in modo che gli stessi lavori non vengano eseguiti contemporaneamente su server Web diversi.Quartz & Spring - Raggruppato ma NON persistente?
A tale scopo, il mio app-context.xml
è il seguente:
<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref bean="cronTrigger"/>
<ref bean="simpleTrigger" />
</list>
</property>
<property name="dataSource" ref="dataSource"/>
<property name="overwriteExistingJobs" value="true"/>
<!-- found in applicationContext-data.xml -->
<property name="applicationContextSchedulerContextKey" value="applicationContext"/>
<property name="quartzProperties">
<props>
<prop key="org.quartz.scheduler.instanceName">SomeBatchScheduler</prop>
<prop key="org.quartz.scheduler.instanceId">AUTO</prop>
<prop key="org.quartz.jobStore.misfireThreshold">60000</prop>
<!--<prop key="org.quartz.jobStore.class">org.quartz.simpl.RAMJobStore</prop>-->
<prop key="org.quartz.jobStore.class">org.quartz.impl.jdbcjobstore.JobStoreTX</prop>
<prop key="org.quartz.jobStore.driverDelegateClass">org.quartz.impl.jdbcjobstore.StdJDBCDelegate</prop>
<prop key="org.quartz.jobStore.tablePrefix">QRTZ_</prop>
<prop key="org.quartz.jobStore.isClustered">true</prop>
<prop key="org.quartz.threadPool.class">org.quartz.simpl.SimpleThreadPool</prop>
<prop key="org.quartz.threadPool.threadCount">25</prop>
<prop key="org.quartz.threadPool.threadPriority">5</prop>
</props>
</property>
</bean>
Tutto funziona bene, tranne che quando si tenta di rimuovere o modificare un trigger, quindi riavviare la mia app, i vecchi fattori scatenanti sono ancora persistenti nel DB, e ancora eseguito. Non voglio questo, voglio solo che vengano cancellati quando l'app si ferma (o viene riavviata). Ho impostato il valore della proprietà overwriteExistingJobs
come vero, poiché ho pensato che fosse ciò che ha fatto.
Qualche idea? Tutto ciò che voglio usare per il DB è il clustering, non una sorta di persistenza al di là di questo.
Ho avuto lo stesso problema e non sono riuscito a trovare alcuna soluzione. Alla fine ho spostato il lavoro fuori dall'app Web e pianificato l'esecuzione tramite cron. Curioso di vedere cosa hanno da dire gli altri. – chedine
Usa la terracotta? –