В моем приложении Spring я использую SchedulerFactoryBean
для интеграции с Quartz. У нас будут кластерные экземпляры Tomcat, и поэтому я хочу иметь кластерную среду Quartz, чтобы одни и те же задания не запускались одновременно на разных веб-серверах.
Для этого мой app-context.xml
выглядит следующим образом:
<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>
Все работает хорошо, за исключением того, что когда я пытаюсь удалить или изменить триггер, перезагрузите приложение, старые триггеры все еще сохраняются в БД и все еще работают. Я не хочу этого, я просто хочу, чтобы их удаляли, когда приложение останавливается (или перезапускается). Я устанавливаю значение свойства overwriteExistingJobs
как true, так как я думал, что он сделал.
Любые идеи? Все, что я хочу использовать для БД, это кластеризация, а не какая-либо настойчивость.