システム時刻が午後12時に達したときにサーブレットからメソッドを呼び出したいのですが、そのメソッドは基本的にデータベースからユーザーに電子メールを介してデータを送信します。Javaサーブレットでこれを実現する方法を教えてください。
2 に答える
5
特定の時間にジョブをスケジュールするために、Quartz は最高の API を提供しました。必要に応じて A ジョブを作成し、午後 12 時にジョブを呼び出すトリガーを作成できます。以下のリンクを参考にしてください。 Quartz スケジューラーの例
于 2013-02-06T04:37:40.493 に答える
1
サーブレットは、この仕事には不適切なツールです。HTTP リクエストに基づいて動作することを目的としており、それ以上のものではありません。1 日に 1 回実行されるバックグラウンド タスクだけが必要です。「バックグラウンド ジョブ」をトリガーするために、エンドユーザーがまさにその瞬間に HTTP リクエストを発行する必要があるとは期待できません。
他の多くの人が言及しているレガシーQuartzライブラリ(明らかにレガシーJ2EE時代にぶら下がっている)とは別に、そのために提供されている標準のJava SE APIを使用することもできますScheduledExecutorService
。ServletContextListener
これは、次のような単純な方法で開始する必要があります。
@WebListener
public class Scheduler implements ServletContextListener {
private ScheduledExecutorService scheduler;
@Override
public void contextInitialized(ServletContextEvent event) {
scheduler = Executors.newSingleThreadScheduledExecutor();
long millisUntil12PM = calculateItSomehow();
scheduler.scheduleAtFixedRate(new SendEmail(), millisUntil12PM, 1, TimeUnit.DAYS);
}
@Override
public void contextDestroyed(ServletContextEvent event) {
scheduler.shutdownNow();
}
}
クラスは次のSendEmail
ようになります。
public class SendEmail implements Runnable {
@Override
public void run() {
// Do your job here.
}
}
それで全部です。従来のサードパーティ ライブラリをいじる必要はありません。
于 2013-02-06T13:33:28.830 に答える