2012-03-05 2 views
2

현재 아래 구성을 사용하여 봄에 Quartz를 실행 중입니다. 스케줄러의 백엔드로 데이터베이스를 사용하는 이유는 클러스터 모드를 사용 가능하게하기 위해서입니다.스프링 셧다운시 DB에서 석영 트리거 제거하기

이 모든 것이 제대로 작동하지만 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) 

이 행을 시도하고 더 이상 봄에 존재하는 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

이 종료 또는 봄의 시작시 DB에서 트리거를 세척 할 수있는 스케줄러를 구성하고 봄부터 트리거를 다시 생성 할 수 있기 : delete-trigger-in-quartz

그래서 제 질문은 스프링 셧다운시 트리거를 업데이트하려면 @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 문서 참조 설명서에서 확인할 수 있습니다.