-2

システム時刻が午後12時に達したときにサーブレットからメソッドを呼び出したいのですが、そのメソッドは基本的にデータベースからユーザーに電子メールを介してデータを送信します。Javaサーブレットでこれを実現する方法を教えてください。

4

2 に答える 2

5

特定の時間にジョブをスケジュールするために、Quartz は最高の API を提供しました。必要に応じて A ジョブを作成し、午後 12 時にジョブを呼び出すトリガーを作成できます。以下のリンクを参考にしてください。 Quartz スケジューラーの例

于 2013-02-06T04:37:40.493 に答える
1

サーブレットは、この仕事には不適切なツールです。HTTP リクエストに基づいて動作することを目的としており、それ以上のものではありません。1 日に 1 回実行されるバックグラウンド タスクだけが必要です。「バックグラウンド ジョブ」をトリガーするために、エンドユーザーがまさにその瞬間に HTTP リクエストを発行する必要があるとは期待できません。

他の多くの人が言及しているレガシーQuartzライブラリ(明らかにレガシーJ2EE時代にぶら下がっている)とは別に、そのために提供されている標準のJava SE APIを使用することもできますScheduledExecutorServiceServletContextListenerこれは、次のような単純な方法で開始する必要があります。

@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 に答える