たとえば、データベース内のすべてのエントリの10分後にコードを実行する必要があります。 クライアントが新しい行をデータベースに追加するたびに、10分後にメソッドを実行する必要があります。サーバー上の特定の時間にいくつかのコードを実行する方法..?
ありがとうございます。
たとえば、データベース内のすべてのエントリの10分後にコードを実行する必要があります。 クライアントが新しい行をデータベースに追加するたびに、10分後にメソッドを実行する必要があります。サーバー上の特定の時間にいくつかのコードを実行する方法..?
ありがとうございます。
Timer timer = new Timer();
このようなDBエントリごとにタイマーとタスクを作成します。
TimerTask task = new TimerTask(){
public void run()
{
//execute the code for every 10 mins
}
}
timer.scheduleAtFixedRate(task, 0, 10 * 60 * 1000); // period is 10 mins
cron
ジョブを使用してください。cron
は、特定の時刻または日付に定期的にコードを実行できる時間ベースのジョブスケジューラです。 eaxmpleこのため
http://en.wikipedia.org/wiki/Cron
'dosomething.sh' 10分ごとに実行されます。
*/10 * * * * /home/me/dosomething.sh
例:http://www.thegeekstuff.com/2009/06/15-practical-crontab-examples/
それはあなたのアプリケーションに依存します。
サーブレットとjspのみを使用していて、EJB、クラスタリングなどを使用しない場合は、java.util.Timerを作成し、DBを更新するたびにタスクを追加してください。タイマーはスケジューリングに従ってタスクを実行します。
さらに深刻なアプリケーションを開発する場合は、Quartzを使用できます。
他の方法として、遅延JMSメッセージを使用する方法があります。詳細については、hereを参照してください。
次に、最も複雑なアプローチはJCAを使用することです。 Application Serverのスレッドポーリングとタイマーに「正当な」アクセス権を持つJCAコンポーネントを作成できます。
これは、ユーザーが行を入力した後」にする必要がどのように正確にあなたの'10分に依存します。重要なことは、実行したい「タスク」をトリガデータにバインドすることです。したがって、ある種のトランザクションIDをデータに追加したいと思うでしょう。このトランザクションデータにタイムスタンプを追加し、定期的に(15秒ごとに)チェックする予定のイベントを作成し、10分を過ぎたトランザクションが見つかった場合は、その次の手順を実行します。
遅延処理を保証する必要があるかどうかによっても異なります。システムが処理を保証しなければならない場合、タイマーは永続的でなければならず、またはシステムがどのジョブが処理されたかを記録しなければならないため、最悪の場合に再開できるようにする(クラッシュなど)。 – ewernli
返信いただきありがとうございます!! はいJSPとサーブレットのみを使用しています。私は今私の質問を詳述したい、親切にも私がこのことを初めて知ったときに私を助けてください。 私がしたいことは、データベースのすべてのエントリで、エントリがデータベースで行われた時刻を記録したいということです(16:00としましょう)。 10分後(16時10分)、コードを実行したい。 これを具体的に行う方法は?可能であれば いくつかのコードリンクを添付してください。 ありがとう、トン.. !!! –