2009-07-27 12 views
13

Spring Frameworkを使用してOracle DBにQuartz Job Storeを実装しています。私のApplicationContext.xmlは以下の通りですSpring Frameworkを使用した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"をチェックしてください。それは本当にデフォルトパッケージの一部ですか? Jobに名前とグループを与え、それをTriggerから参照する必要があります...私は例を追加します。 – 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

関連する問題