2009-07-27 4 views
13

스프링 프레임 워크를 사용하여 Oracle DB에 Quartz Job Store를 구현하고있다. 내 ApplicationContext.xml이 아래에 있습니다스프링 프레임 워크를 사용하는 Quartz JobStore

<bean id="driverJob" class="org.springframework.scheduling.quartz.JobDetailBean"> 
    <property name="jobClass" value="BatchFileCollector" /> 
</bean> 

<bean id="ranchTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean"> 
    <property name="jobDetail" ref="driverJob" /> 
    <property name="startDelay" value="2000" /> 
    <property name="repeatInterval" value="10000" /> 
</bean> 

<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean"> 
    <property name="triggers"> 
     <list> 
      <ref bean="ranchTrigger" /> 
     </list> 
    </property> 
    <property name="dataSource"> 
     <ref bean="dataSource.TEXAN"/> 
    </property> 
    <property name="applicationContextSchedulerContextKey"> 
     <value>applicationContext</value> 
    </property> 
    <property name="autoStartup"> 
     <value>true</value> 
    </property> 
    <property name="configLocation" value="classpath:quartz.properties"/> 
</bean> 

이 구성을 사용하면 아래 오류가 발생합니다.

발생 원인 : org.quartz.JobPersistenceException : 트리거를 저장할 수 없습니다. 트리거에 의해 참조 된 작업 (DEFAULT.driverJob)이 존재하지 않습니다. [중첩 예외 참조 : org.quartz.JobPersistenceException : 트리거가 참조하는 작업 (DEFAULT.driverJob)이 존재하지 않습니다.]

저는 Spring Framework 2.5.6을 사용하고 있습니다. Quartz 버전을 업그레이드해야합니까? 문제를 찾을 수 없습니다.

도움 주셔서 감사합니다. 이 작동하는지

+0

전체 스택 추적을 게시하시기 바랍니다뿐 아니라 예외 텍스트 – skaffman

+0

당신은 http://jksnu.blogspot.com/2011/03/ 다음 링크를 통해 이동할 수 있습니다 quartz-framework-implementation-with.html –

답변

13

귀하의 SchedulerFactoryBean도 등록 "driverJob"를 가질 필요가있다. 트리거와 함께 jobDetails 목록을 추가하십시오.

<bean id="job.statistics.DailyQPSValidationJobTrigger" class="org.quartz.CronTrigger"> 
    <property name="name" value="DailyQPSValidationTrigger" /> 
    <property name="jobName" value="DailyQPSValidation" /> 
    <property name="jobGroup" value="Statistics" /> 
    <property name="volatility" value="false" /> 
    <!-- Each day, 4 o'clock AM --> 
    <property name="cronExpression" value="0 0 4 * * ?" /> 
</bean> 

<!-- Scheduler --> 

<bean id="job.SchedulerProperties" class="somecompany.someproduct.util.spring.PropertiesFactoryBean" 
    scope="singleton"> 
    <property name="source"> 
     <props> 
      <prop key="org.quartz.scheduler.instanceId">AUTO</prop> 
      <prop key="org.quartz.scheduler.instanceName">JobCluster</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.useProperties">false</prop> 
     </props> 
    </property> 
</bean> 

<bean id="job.Scheduler" class="org.springframework.scheduling.quartz.SchedulerFactoryBean" scope="singleton" 
    lazy-init="false"> 
    <property name="startupDelay" value="30" /> 
    <property name="waitForJobsToCompleteOnShutdown" value="true" /> 
    <property name="dataSource" ref="jdbc.DataSource" /> 
    <property name="quartzProperties" ref="job.SchedulerProperties" /> 
    <property name="jobDetails"> 
     <list> 
      <ref bean="job.statistics.DailyQPSValidationJobDetail" /> 
     </list> 
    </property> 
    <property name="triggers"> 
     <list> 
      <ref bean="job.statistics.DailyQPSValidationJobTrigger" /> 
     </list> 
    </property> 
    <property name="schedulerListeners"> 
     <list> 
      <bean class="somecompany.someproduct.job.SchedulerErrorListener"> 
       <property name="monitoringService" ref="monitoring.MonitoringService" /> 
      </bean> 
     </list> 
    </property> 
    <property name="globalJobListeners"> 
     <list> 
      <bean class="somecompany.someproduct.job.JobErrorListener"> 
       <property name="name" value="JobErrorListener" /> 
       <property name="monitoringService" ref="monitoring.MonitoringService" /> 
      </bean> 
     </list> 
    </property> 
</bean> 
+0

ranchTrigger Bean에 driverJob이 포함되어 있기 때문에 schedulerFactoryBean에 driverJob을 추가 할 필요가 없다고 생각합니다. Spring Framework를 사용하여 Quartz JobStore에 대한 샘플 구성을 보내 주시겠습니까? – firstthumb

+0

시도 했습니까? 스케줄러에 작업을 추가하기 만하면됩니다. 그리고 jobClass "BatchFileCollector"를 확인하십시오. 실제로 이것이 Default 패키지의 일부입니까? 그리고 당신은 욥에게 이름과 그룹을주고 그것을 트리거로부터 참조해야합니다 ... 나는 예제를 추가 할 것입니다. – cafebabe

0

는 잘 모르겠어요,하지만 당신은 사용하여 시도 할 수 :

<bean id="driverJob" .../> 

대신 :

<bean name="driverJob" .../> 
+0

작동하지 않습니다. BatchFileCollector 클래스는 org.springframework.scheduling.quartz.QuartzJobBean을 상속합니다. – firstthumb

3

나는 석영 1.5.2과 봄 3.0.4와 같은 문제가 있습니다. 문제는 JobStoreSupport 클래스가 작업에 외래 키가있는 cron 트리거를 저장하려고 시도한다는 것입니다 (db에서 작업을로드하려고 시도 함). 아직 지속되지 않습니다.

석영 1.6.1, 1.7.2 버전과 동일한 문제가 발생합니다.

<bean id="quartzScheduler" class="org.springframework.scheduling.quartz.SchedulerFactoryBean" 
     depends-on="quartzDatabaseCreator"> 
    <property name="autoStartup"> 
     <value>true</value> 
    </property> 
    <property name="dataSource"> 
     <ref bean="dataSource"/> 
    </property> 
    <property name="quartzProperties"> 
     <props> 
      <prop key="org.quartz.jobStore.selectWithLockSQL">SELECT * FROM {0}LOCKS UPDLOCK WHERE LOCK_NAME = ? 
      </prop> 
      <prop key="org.quartz.jobStore.driverDelegateClass">org.quartz.impl.jdbcjobstore.${qrtz.delegateClass} 
      </prop> 
     </props> 
    </property> 
    <property name="triggers"> 
     <list> 
      <ref bean="cronTrigger"/> 
     </list> 
    </property> 
    <property name="schedulerContextAsMap"> 
     <map> 
      <entry key="sygnoServerHelper"><ref bean="sygnoServerHelper"/></entry> 
      <entry key="requestDAO"><ref bean="requestDAO"/></entry> 
      <entry key="alairoCache"><ref bean="alairoCache"/></entry> 
     </map> 
    </property> 
</bean> 

<bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean"> 
    <property name="jobDetail" ref="checkGracePeriodJob" /> 
    <!--         # s m h dom mon dow [y] --> 
    <property name="cronExpression" value="0 0/5 * * * ?" /> 
</bean> 

<bean id="checkGracePeriodJob" class="org.springframework.scheduling.quartz.JobDetailBean"> 
    <property name="jobClass" value="com.synergon.sygnoserver.CheckGracePeriodJob"/> 
</bean> 

+1

그리고이 문제의 해결책은 무엇입니까? – Abdull

관련 문제