Java-毎日のタスクのスケジューリング
-
03-07-2019 - |
質問
アプリケーションが最初に実行された時期や実行時間に関係なく、毎日午後3時にメソッドを実行する効果的な方法を探しています。
これは、OSの介入なしでアプリケーションから完全に実行する必要があります(例:Windowsタスクスケジューラ)
さまざまな構成でjava.util.Timerを試していますが、成功していません。
ご協力いただければ幸いです。
ありがとう。
解決
Javaベースのジョブスケジューリングシステムである Quartz をご覧ください。
他のヒント
クォーツエンジンのようなものを使用したいと思うでしょう。 ( ahem のクラッシュ時など)失敗したため、スレッドを管理しようとする作業が不要になります。
たとえば、スレッドを使用してスリープ状態にし、86400秒(1日)後にウェイクアップすると、DSTの切り替え時に1時間遅れて(1日= 82800秒)または早く(1日= 90000秒)起動します日なので、選択したソリューションに注意してください
組み込みのJDKの方法は、他の人が提案したことを行い、最初に計算することです:
- currentTime-desiredTime
次に、 aのようなものを使用できます。 executorをスケジュールしてタスクを送信し、特定の遅延で実行します。これは、クォーツなどのフレームワークで使用するオプションよりもはるかに簡単ですが、外部を必要としません依存関係。
また、使用しているJDKを常にリストする必要があります。そうすれば、JDKのバージョンに応じたソリューションを提供できます。
次の午後3時までの差を計算し、その時間スリープするスレッドを開始できます。起動すると、メソッドを実行し、再計算してスリープします。これはあなたの意図ですか?
他の人が述べたように、クォーツは選択肢であり、cronのような操作、ジョブ、またはトリガーを実行できます。このテーマに関するリンクは次のとおりです。 http://www.ibm.com/developerworks/java/library/j-quartz/index.html
Jcrontabは、Javaで記述されたスケジューラです。プロジェクトの目的は、Javaプロジェクトに完全に機能するスケジュールを提供することです。