2014-02-05 2 views
0

클러스터 환경으로 옮겨 가고있는 독립 실행 형 환경에서 잘 작동하는 스프링 구현의 석영을 사용하고 있습니다. 저는 Quartz를 조정하기 위해 JDBC 지원 작업 점포를 사용하고 있습니다. 내 인생에서 나는 그것의 데이터베이스 측면을 연결할 때 작동하지 않는 것 같습니다. 초기 설정을 수행하려면, 내가 지시 here을 따라 내 응용 프로그램 컨텍스트는 다음과 같습니다Quartz JDBC 작업 저장 작업이 실행되지 않는다

AutowiringBeanFactory은 기본적으로 정확히 튜토리얼의 것과 동일
<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean"> 
     <property name="configLocation" value="classpath:quartz.properties"/> 
     <property name="dataSource" ref="dataSource"/> 
     <property name="transactionManager" ref="txManager"/> 


     <property name="schedulerName" value="ClusteredScheduler"/> 


     <property name="overwriteExistingJobs" value="true"/> 

     <property name="autoStartup" value="true"/> 
     <property name="applicationContextSchedulerContextKey" value="applicationContext"/> 
     <property name="jobFactory"> 
      <bean class="com.project.scheduling.persistence.AutowiringSpringBeanJobFactory"/> 
     </property> 
     <property name="jobDetails"> 
      <list> 
       <ref bean="shipNoticeJob" /> 
       <ref bean="idleDeviceJob" /> 
       <ref bean="distanceJob" /> 
       <ref bean="deviceMaintenanceJob" /> 
      </list> 
     </property> 

     <property name="triggers"> 
      <list> 
       <ref bean="shipNoticeCronTrigger" /> 
       <ref bean="idleDeviceTrigger" /> 
       <ref bean="distanceTrigger" /> 
       <ref bean="deviceMaintenanceTrigger" /> 

      </list> 
     </property> 
    </bean> 

.

quartz.properties 파일은 여기에 있습니다 :

# Needed to manage cluster instances 
org.quartz.scheduler.instanceId=AUTO 
org.quartz.scheduler.instanceName=ClusteredScheduler 
# 
org.quartz.jobStore.useProperties=true 
org.quartz.jobStore.tablePrefix = QRTZ_ 
org.quartz.jobStore.isClustered = true 

# Change this to match your DB vendor 
#org.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreTX 
org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.StdJDBCDelegate 



org.quartz.scheduler.rmi.export = false 
org.quartz.scheduler.rmi.proxy = false 
org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool 
org.quartz.threadPool.threadCount = 10 
org.quartz.threadPool.threadPriority = 5 
org.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread = true 
org.quartz.scheduler.wrapJobExecutionInUserTransaction=true 

#org.quartz.threadPool.threadCount = 3 
#org.quartz.jobStore.class = org.quartz.simpl.RAMJobStore 

나는이 파일이 클래스 경로에 있는지 알고이 파일에 대한 변경 사항이 실제로 작업 여부를 불에 영향을 미칠 포함. 이 파일의 마지막 두 줄은 완벽하게 작동하는 "독립 실행 형 환경"에서 사용한 구성입니다. 또한 독립형 버전을 사용할 때 응용 프로그램 컨텍스트의 현재 내용이 작동합니다. (분명히 일부 속성은 RAM 작업 저장소가 아닌 데이터베이스 기반 작업 저장소에 적용된다는 점에서 의미가 없습니다.

quartz.properties 파일의 모든 줄을 마지막 두 줄 외에 주석 처리하면 모든 것이 예상대로 작동합니다. 그러나 현재 구현에서는 작업이 실행되지 않고 데이터베이스의 트리거가 실행되지 않습니다.

생각하십니까? 그 어떤 출력을 생성하지 않는 경우 로깅에 대한 질문 당

편집

, 나는 내가
<category name="org.quartz"> 
    <priority value="trace"/> 
    <appender-ref ref="file" /> 

어느 하나

생산했는데, 다음

<logger name="org.quartz"> 
    <level value="trace"/> 
    <appender-ref ref="file" /> 

및 추가 ANY 로깅 출력 ...

+0

로깅에서'org.quartz'를 디버그 레벨로 올리면 발사되지 않는 작업과 관련된 메시지가 보입니까? –

+0

@WillKeeling 위의 수정 사항을 참조하십시오. 나는 석영에 아무 것도 기록하지 못했습니다 ... 용의자입니다 ... –

답변

0

마지막으로 알아 냈습니다. 궁극적 인 문제는 2.2.0의 스키마와 함께 quartz 2.1.6 jar를 사용하고 있다는 것이 었습니다. 즉, 더 큰 문제는 Quartz가 Commons Logging의 Log4J 대신 SLF4j를 사용하기 때문에 클래스 패스에 SLF4j Log4J 바인딩 jar가 필요하다는 것이 었습니다. 결과적으로, 로깅 명령문으로 인해 로그 파일이 작성되지 않았기 때문에 모든 오류가 삼킨 것으로 나타났습니다. 오류 메시지를 볼 수있을 때 놀라운 일이 생겼습니다!

관련 문제