この記事の内容は Java Web スケジュールされたタスクの実装コードに関するものです。必要な方は参考にしていただければ幸いです。
前に書く:
最近のプロジェクトでは、毎日定期的にデータベース テーブルにクエリを実行し、関連するクエリを完了する必要があります。データ更新操作。最初に思い浮かぶのは Timer クラスです。私が古いシステムを最初に保守したときに、タイミング操作も必要とするインターフェイスを開いたのを覚えています。以降の作業で使用するときに簡単に見つけられるように、一般的な使用法を以下に記録します。
Webで使用するため、プロジェクト開始時にこのスケジュールされたタスクを実行する必要があり、これは初期化時に実行されます。タイマー プログラムを作成し、そのタイマー プログラムで、必要に応じて、対応する実行時間と実行する必要があるタスク クラスを設定します。
#1. まず、実行する必要があるタスク クラスを記述します。
public class DailyReportTimerTask extends TimerTask{ public static Logger logger=Logger.getLogger(DailyReportTimerTask.class); public void run() { System.out.println("----开始执行任务--------------"); } }
タスク クラスは TimerTask を継承する必要があることに注意してください
2. タスクの種類、プログラムの開始時間、頻度を管理するクラスを作成します。このスケジュールされたプログラムを実行するには、リスナー
public class TimeManager { public static Logger logger=Logger.getLogger(TimeManager.class); //时间间隔 private static final long PERIOD_DAY = 24 * 60 * 60 * 1000; //24小时执行一次 public TimeManager() { Calendar calendar = Calendar.getInstance(); /*** 定制每日23:10执行方法 ***/ calendar.set(Calendar.HOUR_OF_DAY, 23); calendar.set(Calendar.MINUTE, 10); calendar.set(Calendar.SECOND, 0); Date date=calendar.getTime(); System.out.println(date); //如果第一次执行定时任务的时间 小于 当前的时间 //此时要在 第一次执行定时任务的时间 加一天,以便此任务在下个时间点执行。如果不加一天,任务会立即执行。循环执行的周期则以当前时间为准 if (date.before(new Date())) { date = this.addDay(date, 1); System.out.println(date); } Timer timer = new Timer(); DailyReportTimerTask task = new DailyReportTimerTask(); //安排指定的任务在指定的时间开始进行重复的固定延迟执行。 timer.schedule(task,date,PERIOD_DAY); } //增加几天 public Date addDay(Date date, int num) { Calendar startDT = Calendar.getInstance(); startDT.setTime(date); startDT.add(Calendar.DAY_OF_MONTH, num); return startDT.getTime(); } }
4 を使用できます。最後のステップは、対応するリスナー
public class DailyReportListener implements ServletContextListener{ public void contextDestroyed(ServletContextEvent arg0) { } public void contextInitialized(ServletContextEvent arg0) { new TimeManager(); } }
以上がJava Web スケジュールされたタスクの実装コードの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。