2012-07-25 3 views
3

의 일관성이 시간은 내가 (. 하나는 봄 V 2.5.4을 사용하며, 다른 하나는 봄 V를 사용하여 3.1.1.) 봄에 웹 로직에 석영 1.6.6를 이용하여 Java 응용 프로그램의 몇 가지있다. 내 아키텍처에는 Weblogic 클러스터에 두 개의 응용 프로그램 서버가 있습니다.석영 스케줄러 : 트리거 실행

두 응용 프로그램 모두 간단한 트리거가 설정되어 있습니다 (org.springframework.scheduling.quartz.SchedulerFactoryBean, org.springframework.scheduling.quartz.SimpleTriggerBeanorg.springframework.scheduling.quartz.JobDetailBean 사용). 그들은 모두 60 초마다 실행되도록 설정됩니다.

프로세스가 실행될 시간을 기록하는 관련 org.springframework.scheduling.quartz.QuartzJobBean (시작은 executeInternal() 메서드)에 대한 로깅을 추가했습니다. 때때로 주어진 분 동안 실행이 발생하지 않습니다 - 내가 찾은 무엇

는 시간이 일치하지 않는 것입니다. 예 :

14:26:26,098 
14:28:26,089 
14:31:26,096 
14:33:26,093 
14:35:26,095 
14:36:26,098 
14:38:26,103 

응용이 다음 번에 실행 된 두 개의 트리거 프로세스 갖는다 :

어플리케이션 1은 다음과 같은 경우에 실행 된 하나 개의 트리거 프로세스가 있으면

14:40:05,951 (trigger 1) 
14:41:05,951 (trigger 2) 
14:42:05,943 (trigger 1) 
14:43:05,954 (trigger 2) 
14:44:05,937 (trigger 1) 
14:45:05,956 (trigger 2) 
14:46:05,953 (trigger 2) 
14:47:05,937 (trigger 1) 
14:48:05,941 (trigger 1) 
14:49:05,939 (trigger 1) 
14:50:05,951 (trigger 2) 

를 I 하나의 Weblogic 애플리케이션 서버를 스위치 오프하면 두 애플리케이션이 매 순간마다 모든 작업을 행복하게 수행합니다.

나는 모든 작업에 대한 데이터베이스 테이블을 확인하고 QRTZ_SIMPLE_TRIGGERS.REPEAT_INTERVAL 정확한 (60,000 밀리 초)입니다. QRTZ_TRIGGERS.PREV_FIRE_TIMEQRTZ_TRIGGERS.NEXT_FIRE_TIME의 차이도 60,000입니다. 이되어야하는 이유에 따라

<property name="quartzProperties"> 
    <props> 
     <prop key="org.quartz.scheduler.instanceName">MyClusteredScheduler</prop> 
     <prop key="org.quartz.scheduler.instanceId">AUTO</prop> 
     <prop key="org.quartz.threadPool.class">org.quartz.simpl.SimpleThreadPool</prop> 
     <prop key="org.quartz.threadPool.threadCount">5</prop> 
     <prop key="org.quartz.jobStore.class">org.quartz.impl.jdbcjobstore.JobStoreTX</prop> 
     <prop key="org.quartz.jobStore.driverDelegateClass">org.quartz.impl.jdbcjobstore.StdJDBCDelegate</prop> 
     <prop key="org.quartz.jobStore.isClustered">true</prop> 
     <prop key="org.quartz.jobStore.clusterCheckinInterval">5000</prop> 
     <prop key="org.quartz.jobStore.dataSource">myDS</prop> 
     <prop key="org.quartz.jobStore.tablePrefix">QRTZ_</prop> 
     <prop key="org.quartz.dataSource.myDS.driver">oracle.jdbc.driver.OracleDriver</prop> 
     <prop key="org.quartz.dataSource.myDS.URL">{db connection string}</prop> 
     <prop key="org.quartz.dataSource.myDS.user">{username}</prop> 
     <prop key="org.quartz.dataSource.myDS.password">{password}</prop> 
     <prop key="org.quartz.dataSource.myDS.maxConnections">5</prop> 
     <prop key="org.quartz.dataSource.myDS.validationQuery">select 0 from dual</prop> 
    </props> 
</property> 

어떤 생각 : 애플리케이션 컨텍스트 파일에서

quartzProperties 정의는 다음과 같은 항목이 있습니다? 미리 감사드립니다.

+0

기회 당신은 당신이 스케줄러의 두 세트를 실행할 때 데이터베이스에있는 모든 출시되지 않은 잠금 장치가 있는지 여부를 확인할 수 있습니까? –

+0

일이 1 분 안에 끝나나요? 쿼츠 작업은 상태 저장이므로 2 개의 병렬 작업 인스턴스가 필요하지 않습니다. 또한 스레드 수를 늘리는 것을 고려하십시오. –

+0

의견을 보내 주셔서 감사합니다. 1) 데이터베이스를 점검 할 항목이 확실하지 않습니다. 나는 QRTZ_TRIGGERS.TRIGGER_STATE가 매분 몇 초 동안 ACQUIRED로 기다리는 것을 확인할 수 있습니다. 2) 예, 작업은 60 초 내에 완료됩니다. 3) 스레드 수를 늘리고보고합니다. – GarlicBread

답변

0

은 겉으로 고정 : 문제가 석영과는 무엇보다 일관성 트리거 시간을 제안하는 일관성 로깅 메시지에 대한 의존도과 더했다.