2016-10-25 8 views
1

私はquartz schedulerを私のspringアプリと使用しています。これまでのところすべてうまくいきますが、将来予定されている仕事をテストしてから今から1ヶ月後には、私は仕事をスケジューリングしてから、私のlinuxマシンのシステム時間をその日にトリガーが起動する5分前に変更します。私は待っていた、トリガーの火の時間が来て、行ったが、発射しなかった。私がテストしたもう1つのアプローチは、システム時間を変更する必要がないように、Oracleテーブルの起動時間を変更することでした。それは私が翌日の仕事を4時にスケジュールするときにも機能します(日付を変更する必要はありませんが、それは24時間待機していました)。私は加速されたシステム時間が石英ではうまくいかない理由を理解していません。どんな説明も役立ちます。ありがとう!クォーツスケジューラテストシナリオが動作しない

P.S:私は石英製のコアライブラリを使用していますが、石英製の一体型スプリングを使用していません。

+0

クォーツスケジューラは、おそらくそれが起動し、それ自身のクロック/カウンタを維持し、システム時刻をピックアップ。 Quartzが独自のクロック/カウンタ値を使用しているため、システム時刻を変更することはQuartzによって決して受け入れられません。実際にそれを検証する唯一の方法は、Quartzのソースコードを介して泳ぐことです。 – lincolnadym

+0

@lincolnadymそれは検出が難しいでしょう。システム時間を変更すると、スケジューラを再起動し、ログに更新日時が表示されます。 – Gurkha

答えて

0

これにかなりの時間を費やした後、私はorg.quartzのログを有効にし、アプリが読み込まれるとquartzが初期化されていないことがわかりました。スニペットに続いて、起動時にquartzを初期化します:

<servlet> 
     <servlet-name>QuartzInitializer</servlet-name> 
     <servlet-class>org.quartz.ee.servlet.QuartzInitializerServlet</servlet-class> 
     <init-param> 
      <param-name>shutdown-on-unload</param-name> 
      <param-value>true</param-value> 
     </init-param> 
     <init-param> 
      <param-name>start-scheduler-on-load</param-name> 
      <param-value>true</param-value> 
     </init-param> 
     <init-param> 
      <param-name>config-file</param-name> 
      <param-value>quartz.properties</param-value> 
     </init-param> 
     <load-on-startup>2</load-on-startup> 
    </servlet>