2012-03-13 22 views
0

私はSpring 2.5とQuartz Scheduler 1.8.6をクラスタ構成で使用しています。このジョブは、2つのデータベースを同期します。私はそれが毎分を実行したいクラスタ化されたQuartz Schedulerが正しく起動しない?

cronExpression=0 * * * * ? 

すなわち:にcronExpressionセットのプロパティで

<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean" id="quartzScheduler" lazy-init="false"> 
    <property name="applicationContextSchedulerContextKey" value="applicationContext"/> 
    <property name="dataSource" ref="dataSource"/> 
    <property name="transactionManager" ref="transactionManager"/> 
    <property name="overwriteExistingJobs" value="true"/> 
    <property name="autoStartup" value="true"/> 
    <property name="triggers"> 
     <list> 
      <bean class="org.springframework.scheduling.quartz.CronTriggerBean" id="someCronTrigger"> 
       <property name="jobDetail" ref="myQuartzJobDetail"/> 
       <property name="cronExpression" value="${cronExpression}"/> 
      </bean> 
     </list> 
    </property> 
    <property name="quartzProperties"> 
     <props> 
      <prop key="org.quartz.scheduler.instanceName">MyBatchScheduler</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">1</prop> 
      <!-- Don't set thread priority for now --> 
      <prop key="org.quartz.jobStore.misfireThreshold">30000</prop> 
      <prop key="org.quartz.jobStore.class">org.quartz.impl.jdbcjobstore.JobStoreTX</prop> 
      <prop key="org.quartz.jobStore.driverDelegateClass">org.quartz.impl.jdbcjobstore.oracle.OracleDelegate</prop> 
      <prop key="org.quartz.jobStore.useProperties">false</prop> 
      <prop key="org.quartz.jobStore.tablePrefix">QRTZ_</prop> 
      <prop key="org.quartz.jobStore.isClustered">true</prop> 
      <prop key="org.quartz.jobStore.clusterCheckinInterval">5000</prop> 
     </props> 
    </property> 
</bean> 

:私は、次の構成を有しています。私は全く同じ設定とこの仕事を実行している2台のマシンがあります。私は、彼らがする必要がありますように、これらの2つのアプリが毎分を発射していない理由のために途方に暮れています

Machine 1             Machine 2 
2012-03-13 09:47:00,009 INFO Starting synchronization... 2012-03-13 09:46:00,041 INFO Starting synchronization... 
2012-03-13 09:54:00,010 INFO Starting synchronization... 2012-03-13 09:51:00,041 INFO Starting synchronization... 
2012-03-13 10:00:00,010 INFO Starting synchronization... 2012-03-13 09:57:00,042 INFO Starting synchronization... 
2012-03-13 10:02:00,007 INFO Starting synchronization... 2012-03-13 09:59:00,042 INFO Starting synchronization... 

:私はこの結果を参照してください。たとえば、上記の2つのログから、ジョブは9:48,9:49,9:50,9:52,9:53などで起動しません。

編集:私は以下のコメントで言ったように

、私の問題は、私は毎分トリガの一部を消費したを探していませんでした浮遊プロセスがあったということでした。私はその迷いのプロセスを殺し、それが必要なように働いた。

答えて

0

ジョブを実行するサーバーを制御することはできませんが、1台または別のマシンで1度だけ実行されることが保証されています。 Quartzクラスタ内のすべてのマシンでシステム時刻が正確に同期されていない場合、ロードバランシングは確実に機能しません。ほとんどの場合、将来的に最も時間のかかるサーバーは、すべてではないにせよ、ほとんどの場合、ほとんどのジョブを実行します。

なぜこれら二つのアプリはちょうど

分ごとに、私はこの質問を理解していないジョブを実行しないでください。一部のジョブがまったく実行されていないことを意味しますか(ログに示されているように、たとえば09:48:00などが間違っています)。

+0

ご質問のとおり、正確にはい。ジョブは9:48、9:49、9:50、9:52、9:53などで起動しませんでした – daveslab

+0

@daveslab:単一のサーバーで動作しますか?ログに失火があるのを見ますか? –

+0

私のローカルマシン上で2つのインスタンスがあっても失火を観察します(確認のために再テストしました) – daveslab