Java Webプログラムにタイミングタスクを追加します。2つの方法を次に示します。1。リスナーインジェクションを使用します。 2。SpringAnnotation@scheduled Injectionを使用します。
2番目のフォームが推奨されます。
1.リスナーインジェクションを使用します
①:リスナークラスを作成します:
javax.servlet.servletcontextevent; Import javax.servlet.servletcontextlistener; public class timerdatatasklistenerは、servletcontextlistener {@override void contextInitialized(servletcontextextexentevent servletextextextextextextextextextextextextextextextextener(@override void contextlistener)を実装しています。 } @Override public void contextdestroyed(servletContextEvent servletContextevent){}}②:時限タスククラスを作成します:
Import java.util.calendar; Import java.util.date; Import java.util.timer; public class timermanager {//時間間隔:24hプライベート静的最終長期= 24 * 60 * 60 * 1000; public Timermanager(){Calendar Calendar = Calendar.GetInstance(); //カレンダーの実行をカスタマイズします.set(calendar.hour_of_day、12); calendar.set(calendar.minute、30); calendar.set(Callearn.second、30);日付date = calendar.getTime(); //初めて時間タスクを実行する時間}タイマータイマー= new Timer(); timertaskservice task = new TimerTaskservice(); //指定されたタスクをスケジュールして、指定された時間に繰り返し固定遅延実行を開始します。 Timer.schedule(task、date、period_day); } //プライベートデート日数(日付、int num){calendar startdt = calendar.getInstance(); startdt.settime(date); startdt.add(calendar.day_of_month、num); return startdt.getTime(); }}③:Timertaskクラスを作成します:
Import java.util.timertask; public class timertaskservice extends timertask {@override public void run(){//実行するタスクロジックはここで書かれています。 } catch(Exception e){System.out.println( "パスワードに失敗する!"); }}}④:web.xmlでリスナーを登録します
<! - TimerDatataskListenerリスナー - > <リスナー> <リスナークラス> com.jsiqi.resume.service.timerdatasklistener </ristener-class> </ristener>
2。スプリングアノテーションを使用して注入します
私のプロジェクトのフレームワークはspring + springmvc + mybatisです
コード例:
org.springframework.scheduling.annotation.scheduled; import org.springframework.stereotype.component; @componentpublic class timertask {@scheduled(cron = " */30 * * * *")// public void test(){try try {/execut System.out.println( "パスワードを正常に挿入!"); } catch(Exception e){System.out.println( "パスワードに失敗する!"); }}}タイミング時間設定は次のとおりです。
crontrigger構成フルフォーマットは次のとおりです。毎日午前10時、午後2時、午後4時:0/30 9-17 * *? 9〜5営業時間中0.5時間0 0 12? *水は毎週水曜日の正午に「0 0 12 * *? "0 15 10 * *? 「毎日10:15 AMトリガー」0 15 10 * *? 2005 "2005デイリートリガー" 0 * 14 * *? "トリガー" 0 0/5 14 * *? 3月曜日の3月の水曜日の午後10時と午後2時44分、毎年3月の水曜日の午後10時15分から金曜日のトリガー「0 15 10 15 *?」月の15日の午前10時15分「0 15 10 L *?」午前10時15分、月の最終日の午前10時15分「0 15 10? * 6L」10:15 AMの月の最後の金曜日 "
| シリアルナンバー | 説明します | 必要ですか | 許可された値 | ワイルドカードが許可されています |
|---|---|---|---|---|
| 1 | 2番 | はい | 0-59 | 、 - * / |
| 2 | ポイント | はい | 0-59 | 、 - * / |
| 3 | 時間 | はい | 0-23 | 、 - * / |
| 4 | 日 | はい | 1-31 | 、 - *? / LW |
| 5 | 月 | はい | 1-12または1月 - 〜12月 | 、 - * / |
| 6 | 週 | はい | 1-7またはサンサット | 、 - *? / LW |
| 7 | 年 | いいえ | 空または1970-2099 | 、 - * / |
ワイルドカードの説明:
*すべての値を意味します。たとえば、部分フィールドに「*」を設定します。つまり、毎分がトリガーされます。
?意味が指定されていないことを意味します。使用されるシナリオは、現在設定されているこのフィールドの価値を気にする必要がないということです。
たとえば、操作は毎月10日にトリガーされますが、毎週の日は気にしないため、「?」に設定する必要があるフィールドは気にしません。 0 0 10 *に設定されていますか?
- 間隔を示します。たとえば、時間に「10-12」を設定すると、10、11、および12ポイントがトリガーされることがわかります。
、たとえば、毎週のフィールドで「月、水、金」を設定することを意味する複数の値を指定することは、月曜日、水曜日、金曜日にトリガーすることを意味します
/増分トリガーの場合。 2番目に「5/15」を設定する場合、5秒から始まると、15秒ごと(5,20,35,50)をトリガーすることを意味します。月フィールドに「1/3」を設定して、月の1日に開始し、3日ごとにトリガーします。
lは最終的な意味を意味します。当日のフィールド設定では、月の最終日を示します(今月は、2月の場合、Runnian [Leap]であるかどうかにも基づいています)。今週のフィールドでは、「7」または「SAT」に相当する土曜日を示します。数値の前に「L」が先行する場合、それはデータの最後の1つを意味します。たとえば、毎週のフィールドで「6L」のようなフォーマットを設定することは、「月の最後の金曜日」を意味します
wは、指定された日付(月曜日から金曜日)に最も近い勤務日を示します。たとえば、毎月15日に最も近い勤務日を示すために、「15W」をデイフィールドに設定します。 15日が土曜日になった場合は、最新の金曜日(14日)のトリガーを探してください。 15日が毎週でない場合は、最新の月曜日(16日)のトリガーを探してください。 15日が平日(月曜日から金曜日)に行われた場合、その日にトリガーされます。フォーマットが「1W」として指定されている場合、毎月1日後の最新の営業日を示します。 1日が土曜日の場合、来週の月曜日にトリガーされます。 (注意してください、特定の数値のみを「w」前に設定し、「間隔」 - 「許可されていません)。
#シリアル番号(毎月の週を表す)。たとえば、週のフィールドに「6#3」を設定すると、毎月第3土曜日が示されます。 「#5」が指定されている場合、5週目に土曜日はありませんが、構成はトリガーされないことに注意してください(母の日と父の日に最も適しています)。
ヒント:
「L」と「W」は組み合わせて使用できます。 「LW」が日フィールドに設定されている場合、それは月の最後の営業日にトリガーされることを意味します。
英語の文字が使用されている場合、週のフィールドの設定はケースに依存しません。つまり、月は月と同じです。
参照:
https://www.cnblogs.com/liaojie970/p/5913272.html
http://prisonbreak.iteye.com/blog/2247216