Dans mon application de printemps j'utilise le SchedulerFactoryBean
pour intégrer avec Quartz. Nous allons avoir des instances Tomcat en cluster, et donc je veux avoir un environnement Quartz en cluster, de sorte que les mêmes tâches ne s'exécutent pas en même temps sur des serveurs web différents.Quartz & Spring - Clustered mais pas persistant?
Pour ce faire, mon app-context.xml
est la suivante:
<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>
Tout fonctionne bien, sauf que lorsque je tente de supprimer ou modifier un élément déclencheur, puis redémarrez mon application, les anciens déclencheurs sont toujours persisté dans la DB, et toujours courir. Je ne veux pas cela, je veux juste qu'ils soient supprimés lorsque l'application s'arrête (ou est redémarré). J'ai défini la valeur de la propriété overwriteExistingJobs
pour être vraie, puisque je pensais que c'est ce qu'elle a fait.
Des idées? Tout ce que je veux utiliser pour la base de données est la mise en grappe, pas n'importe quelle sorte de persistance au-delà de cela.
J'ai eu le même problème et je n'ai pas trouvé de solution. Enfin, j'ai déplacé le travail hors de l'application web et l'a programmé pour fonctionner via cron. Curieux de voir ce que les autres ont à dire. – chedine
Utilisez Terracotta? –