2016-12-12 3 views
2

システムでは、これらのスケジュールに関連付けられた複数のクォーツ(石英2.2.2)スケジュールとジョブがあります。冬の時間変更が発生した場合、クォーツでジョブが実行されない

冬時間の変更(DST)が発生すると問題が発生します。冬期の変更により、時刻は午前3時に02:00(ベルリン)に戻ります。

つまり、その晩には午前2時が2回あります。ただし、水晶APIはDSTをサポートしていません。午前2時にスキップし、午前3時に続きます。彼らのdocumentationでは、彼らはを扱っています。

1時00午前 - 正しく
2時00分午前に動作します - 正しく
3時00分午前の作品 - -
2時00分午前をスキップし、当社のシステムでは正しく

に動作します、我々は持っていません。別の時間にタイマーを設定し、ジョブをトリガする必要があります。

私はインターネット上のほぼすべての回答を読み、この問題に適した解決策を見つけられませんでした。最も論理的な回答(ronの答え)はthisですが、私は最終的なCronExpressionクラスを拡張することはできません。おそらく、それは以前のバージョンでは最終的ではありませんでした。

優雅かどうか、私はすべての可能な回答を待っています(そして感謝します)。

答えて

0

私はこの問題を私自身のハイブリッド解決策で解決しました。

主に、ジョブが実行されるクラス(ジョブインターフェイスを実装するクラス)では、次回ジョブがいつトリガされるかをチェックしています。 10月の最後の日曜日の午前2時に(冬の変更は10月の最後の日曜日に行われます)、単純なトリガー(夏時間の変更の影響を受けない)でジョブを再スケジュールします。オリジナルのトリガをシリアル化し、03:00以降に元のcronトリガを使用してジョブを再スケジュールします。

私はこれが理想的な解決策ではないことを知っていますが、私はそれがこの問題の最良の解決策の1つだと思います。

関連する問題