[英]Removing quartz triggers from the DB on spring shutdown
我目前正在使用以下配置在春季下運行Quartz。 使用數據庫作為調度程序的后端的原因是啟用集群模式。
一切正常,但是如果我想刪除InitialAbstractPublicationJob,我會遇到問題。 假設我刪除了以下所有配置,除了調度程序本身。 DB表QRTZ_TRIGGERS中仍然存在一行。
TRIGGER_NAME: initialAbstractTrigger
TRIGGER_GROUP: DEFAULT
JOB_NAME: initialAbstractDataAccessDelegator
JOB_GROUP: DEFAULT
IS_VOLATILE: 0
DESCRIPTION: NULL
NEXT_FIRE_TIME: 1330953433511
PREV_FIRE_TIME: 1330953432511
TRIGGER_STATE: WAITING
TRIGGER_TYPE: SIMPLE
START_TIME: 1330953336511
END_TIME: 0
CALENDAR_NAME: NULL
MISFIRE_INSTR: 0
JOB_DATA: NULL
1 row in set (0.00 sec)
該行使石英嘗試加載Spring中不再存在的AbstractPublicationJobBean,並且異常情況很多。 所以我的問題是:是否可以將調度程序配置為在spring的關閉或啟動時從DB刷新觸發器,並從spring applicationContext.xml重新創建觸發器。
<bean id="initialAbstractPublicationJob" class="bbc.forge.ibroadcast.snowball.InitialAbstractPublicationJob" />
<bean id="initialAbstractDataAccessDelegator" class="org.springframework.scheduling.quartz.JobDetailBean">
<property name="jobClass" value="bbc.forge.ibroadcast.snowball.DelegatingJobBean"/>
<property name="durability" value="false" />
<property name="jobDataAsMap">
<map>
<entry key="job.bean.name" value="initialAbstractPublicationJob" >
</entry>
<entry key="sdtl.file.prefix" value="sdtl_" >
</entry>
</map>
</property>
</bean>
<bean id="initialAbstractTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean">
see the example of method invoking job above
<property name="jobDetail" ref="initialAbstractDataAccessDelegator" />
10 seconds
<property name="startDelay" value="0" />
repeat every n milliseconds
<property name="repeatInterval" value="1000" />
</bean>
<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref bean="initialAbstractTrigger" />
</list>
</property>
<property name="dataSource">
<ref bean="dataSource" />
</property>
<property name="applicationContextSchedulerContextKey">
<value>applicationContext</value>
</property>
<property name="quartzProperties">
<props>
<prop key="org.quartz.jobStore.isClustered">true</prop>
<prop key="org.quartz.scheduler.instanceId">AUTO</prop>
</props>
</property>
</bean>
您可以使用XMLSchedulingDataProcessorPlugin
在單獨的XML文件中存儲作業並觸發配置。 該文件可以在啟動時覆蓋現有作業:
<?xml version="1.0" encoding="UTF-8"?>
<job-scheduling-data xmlns="http://www.quartz-scheduler.org/xml/JobSchedulingData"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation=" http://www.quartz-scheduler.org/xml/JobSchedulingData http://www.quartz-scheduler.org/xml/job_scheduling_data_2_0.xsd ">
<processing-directives>
<overwrite-existing-data>true</overwrite-existing-data>
<ignore-duplicates>true</ignore-duplicates>
</processing-directives>
</job-scheduling-data>
有關該插件的更多信息,請參見“ 配置調度程序插件”文檔參考。
重復的問題: 在石英中刪除觸發器
如果您想在彈簧關閉時更新觸發器,只需使用@PreDestroy方法執行這些操作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.