In meiner Spring-Anwendung verwende ich die SchedulerFactoryBean
zur Integration mit Quartz. Wir werden Tomcat-Instanzen gruppiert haben, und daher möchte ich eine Quartz-Cluster-Umgebung haben, damit dieselben Jobs nicht gleichzeitig auf verschiedenen Webservern ausgeführt werden.Quartz & Spring - Geclustert, aber nicht dauerhaft?
Um dies zu tun, mein app-context.xml
wie folgt:
<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>
Alles funktioniert gut, außer dass, wenn ich versuche, einen Auslöser zu löschen oder zu ändern, dann meine Anwendung neu starten, werden die alten Auslöser blieb noch in der DB, und immer noch laufen. Ich möchte das nicht, ich möchte nur, dass sie gelöscht werden, wenn die App stoppt (oder neu gestartet wird). Ich setze den Wert der overwriteExistingJobs
Eigenschaft, um wahr zu sein, da ich dachte, dass es das ist, was es getan hat.
Irgendwelche Ideen? Alles, was ich für die DB verwenden möchte, ist das Clustering, nicht irgendeine Art von Persistenz darüber hinaus.
Ich hatte das gleiche Problem und ich konnte keine Lösung finden. Schließlich habe ich den Job aus der Web App verschoben und geplant, dass er über cron läuft. Neugierig zu sehen, was andere zu sagen haben. – chedine
Verwenden Sie Terrakotta? –