4
클러스터 된 설정 (JDBC 데이터 저장소 포함)에서 Quartz 2.1.6과 Spring 3.1을 사용하는 중에 문제가 발생합니다. 현재 상황 :쿼츠 클러스터링 - 서버가 시작될 때 중복 된 트리거
-
잡스와 CRON 트리거는 스프링 설정 파일에 정의되어
- overwriteExistingJobs 속성의 SchedulerFactoryBean에 true로 설정되어 (아래 참조), 그래서 우리는 DB에 추가 된 새 작업 정의를하지 않습니다 각 배포마다.
- 그러나 클러스터에 배포 한 후에는 각 노드가 트리거 데이터를 다시 만드는 것처럼 보입니다. 예를 들어, 1 개의 작업과 4 개의 노드를 가리키는 트리거가 2 개있는 경우 클러스터 배포 후에 DB에 1 개의 작업 정의와 4x2 트리거가 있습니다. 각각의 재배포는 4x2 트리거를 추가합니다.
이 동작이 정상입니까? 만약 그렇다면, Quartz가 각 배치에서 트리거 데이터를 재 작성하지 않도록 어떻게 말할 수 있습니까? 각 트리거는 "이름"속성을 가지고 있지 않았기
<bean name="myJob" class="org.springframework.scheduling.quartz.JobDetailFactoryBean">
<property name="jobClass" value="com.etc.MyJob" />
</bean>
<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean"
p:waitForJobsToCompleteOnShutdown="false" lazy-init="false">
<property name="dataSource" ref="myDataSource" />
<property name="transactionManager" ref="transactionManager" />
<property name="overwriteExistingJobs" value="true" />
<property name="autoStartup" value="true" />
<property name="jobFactory">
<bean class="org.springframework.scheduling.quartz.SpringBeanJobFactory"/>
</property>
<property name="triggers">
<list>
<bean class="org.springframework.scheduling.quartz.CronTriggerFactoryBean" p:cronExpression="0 0 0 * * ?" p:misfireInstruction="2">
<property name="jobDetail" ref="myJob" />
</bean>
<bean class="org.springframework.scheduling.quartz.CronTriggerFactoryBean "
p:cronExpression="0 0 20 * * ?"
p:misfireInstruction="2">
<property name="jobDetail" ref="myJob" />
</bean>
</list>
</property>
<property name="quartzProperties">
<props>
<prop key="org.quartz.scheduler.instanceName">fsbu_scheduler</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.impl.jdbcjobstore.JobStoreTX</prop>
<prop key="org.quartz.jobStore.driverDelegateClass">org.quartz.impl.jdbcjobstore.oracle.weblogic.WebLogicOracleDelegate
</prop>
<prop key="org.quartz.jobStore.selectWithLockSQL">SELECT * FROM {0}LOCKS WHERE SCHED_NAME = {1} AND LOCK_NAME = ? FOR UPDATE
</prop>
<prop key="org.quartz.jobStore.tablePrefix">fsqrz_</prop>
<prop key="org.quartz.scheduler.skipUpdateCheck">true</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">3</prop>
<prop key="org.quartz.plugin.triggHistory.class">org.quartz.plugins.history.LoggingTriggerHistoryPlugin
</prop>
<prop key="org.quartz.plugin.triggHistory.triggerFiredMessage">Trigger {1}.{0} fired job {6}.{5} at {4, date,
yyyy-MM-dd HH:mm:ss}
</prop>
<prop key="org.quartz.plugin.triggHistory.triggerCompleteMessage">Trigger {1}.{0} completed firing job {6}.{5} at {4,
date, yyyy-MM-dd HH:mm:ss} with resulting trigger instruction code
{9}
</prop>
</props>
</property>
</bean>
명확히하기 :'SimpleTriggerBean'은'name' properrty 세트를 필요로합니다. – Thomas