Удаление кварцевых триггеров из БД при отключении пружины - PullRequest
2 голосов
/ 05 марта 2012

Я сейчас использую Quartz под пружиной, используя конфигурацию ниже.Причиной использования базы данных в качестве бэкэнда для планировщика является включение кластерного режима.

Все это прекрасно работает, но если я хочу удалить 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, которого больше нет весной, и имеется множество исключений.Итак, мой вопрос: возможно ли настроить планировщик для сброса триггеров из БД при выключении или запуске Spring, и воссоздать триггеры из 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>

Ответы [ 2 ]

1 голос
/ 05 марта 2012

Вы можете использовать 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>

Немного больше о плагине можно найти в Настройка плагинов планировщика справочная документация.

0 голосов
/ 05 марта 2012

дубликат вопроса: delete-trigger-in-quartz

если вы хотите обновить триггер при закрытии пружины, просто сделайте это методом @PreDestroy.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...