2012-03-05 78 views
2

我目前使用下面的配置在彈簧下運行Quartz。將數據庫用作調度程序的後端的原因是啓用集羣模式。在彈簧關閉時從DB上去掉石英觸發器

這一切工作正常,但如果我想刪除InitialAbstractPublicationJob我有問題。假設我刪除了下面的所有配置,除了調度器本身。數據庫表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) 

該行導致石英嘗試加載彈簧不再存在的AbstractPublicationJobBean和異常比比皆是。所以我的問題是:是否有可能配置調度在關機或彈簧的啓動刷新從數據庫觸發器,並重新從春天的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> 

回答

0

重複的問題:delete-trigger-in-quartz

如果你想在spring關閉時更新觸發器,只需在@PreDestroy方法中做這些事情。

1

您可以使用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> 

多一點點的插件可以在Configure Scheduler Plugins參考文檔中找到。