単一のジョブを作成します。定期的に実行してもらいます。
事実上、あなたは次のような性質の何かをしているでしょう:
SELECT count(*) FROM table WHERE new = 1;
(または何でも)
毎秒、5秒、10秒、アクティビティに基づいて妥当と思われるものを実行します。
count ==Nの場合、プロセスを実行します。 「最後の実行からの時間」==5分になったら、プロセスを実行します。
プロセスは同じです。2つの基準でより頻繁にチェックするだけです。
これには、ジョブが2回起動する不正な競合状態が発生しないという利点があります(ジョブAは、最後のジョブが実行されたときから5分であると思われる挿入カウントを検出したため)。まれですが、競合状態は常に「決して起こらない」「まれな」イベントを積極的に求めているようです。
スケジューリングに関しては、プロセスを維持したり、存続させたり、デーモン化したりする必要がないため、crontabは簡単です。
長時間実行されているコンテナ(アプリサーバー、Tomcatなど)で既に実行している場合、その問題はすでに解決されており、それを活用できます。
cronの欠点は、粒度が高く、せいぜい1分ごとにしか実行されないことです。それが長すぎると、うまくいきません。しかし、問題がなければ、点灯し、チェックを行い、終了するだけの単純なプロセスを持つことには真の価値があります。もちろん、何らかの形でその状態を維持する必要があります(たとえば、ジョブログを調べて、最後のジョブがいつ実行されたかを確認できます)。
Javaには、多くのオプションがあります。rawスレッド、スリープ、タイマー、ScheduledExecutorService、Quartz、EJBタイマーBean(Java EEコンテナーを実行している場合)などです。
でも、私はKISSファンです。 cronジョブで実行できる場合は、実行させて、1回実行します。