W mojej aplikacji Spring używam SchedulerFactoryBean
do integracji z Quartz. Będziemy mieć klastrowane instancje Tomcat, a więc chcę mieć klastrowane środowisko kwarcowe, aby te same zadania nie działały jednocześnie na różnych serwerach internetowych.Mechanizm kwarcowy i sprężynowy - klastrowany, ale nietrwały?
Aby to zrobić, mój app-context.xml
jest następujący:
<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>
Wszystko działa dobrze, poza tym, że gdy próbuję usunąć lub zmienić spust, a następnie ponownie uruchomić aplikację, stare wyzwalacze są nadal utrzymywały się w DB, i nadal działa. Nie chcę tego, po prostu chcę je usunąć, gdy aplikacja zatrzyma się (lub zostanie ponownie uruchomiona). Ustawiłem wartość właściwości overwriteExistingJobs
, aby była prawdziwa, ponieważ uważam, że tak właśnie było.
Wszelkie pomysły? Wszystko, co chcę użyć DB, to klastrowanie, a nie jakakolwiek trwałość poza tym.
Miałem ten sam problem i nie mogłem znaleźć żadnego rozwiązania. Ostatecznie przeniosłem pracę z aplikacji internetowej i zaplanowałem jej uruchomienie przez crona. Ciekawy, aby zobaczyć, co inni mają do powiedzenia. – chedine
Użyj terakoty? –