最近、メンバーポイントのタイミングされた計算、サードパーティインターフェイスを呼び出すなど、プロジェクトにスケジュールされた実行タスクを実装する必要があります。プロジェクトはSpringフレームワークを使用するため、Springフレームワークと共同で導入されます。
宿題を書く
つまり、普通のポジョ、次のように:
package com.pcmall.task;import org.slf4j.Logger;import org.slf4j.LoggerFactory;public class TaskA {private static Logger logger = LoggerFactory.getLogger(TaskA.class);public void taskA1(){for(int i=0;i<100;i++){System.out.println("----A1----" + i);}} public void taska2(){for(int i = 0; i <100; i ++){system.out.println( "----- a2 ----" + i);}}}}} Spring構成ファイルで特定のタスクを設定します
<?xmlバージョン= "1.0" encoding = "utf-8"?> <beans xmlns = "http://www.springframework.org/schema/beans" xmlns:xsi = "http://www.w3.org/2001/xmlschema-instance" xsi:schemalocation = "http://ww.springframework http://www.springframework.org/schema/beans/spring-beans.xd"> <bean id = "taska"> </bean> <bean id = "taskb"> </bean> <bean> <bean id = "taskjoba1" value = "taska1"> </property> <property name = "concurrent" value = "false"> </property> </bean> <bean id = "taskjoba2"> <property name = "TargetObject" ref = "taska"> </property name> <property name = "Targetmethod" value = "taska2" id = "taskjobb1"> <プロパティ名= "ターゲットオブジェクト" ref = "taskb"> </property> <property name = "targetmethod" value = "taskb1"> </property name = "concurrent" value = "false"> </property> </bean> <bean id = "taskjobb2" name = "TargetMethod" value = "taskb2"> </property> <property name = "concurrent" value = "false"> </bean> <bean id = "daska1trigger"> <プロパティ名= "jobdetail"> <bean = "taskjoba1"/>> </property> <property = " ?</value> </property> </bean> <bean id = "taska2trigger"> <property name = "jobdetail"> <ref bean = "taskjoba2"/> </property name> <property name = "cronexpression =" cronexpression " name = "jobdetail"> <ref bean = "taskjobb1"/> </property> <property name = "cronexpression"> <value> 0 0/1 * * *? name = "cronexpression"> <balue> 0 0/2 * * * *?</value> </property> </bean> <bean id = "scheduler" class = "org.springframework.quartz.schedulerfactorybean"> <Property name = "Triggers" bean = "taska2trigger"/> <ref bean = "taskb1trigger"/> <ref bean = "taskb2trigger"/> </list> </property> </bean> </beans>
知らせ
トリガーは1つのジョブのみをトリガーできますが、ジョブは複数のトリガーによってトリガーされる可能性があります。これにより、今回は並行性の問題が発生します。 Quartzでは、同じジョブを同時に実行したくない場合は、ジョブの代わりにStatefuljobを実装できます。春にmetholokingjobdetailfactorybeanを使用する場合、concurrent = "false"プロパティを設定することでそれを行うことができます。
エンドノート
単一のアプリケーションではなく、春にクォーツを使用することの利点は次のとおりです。
すべてのタスクスケジューリング設定を同じ場所に置くと、タスクが容易になります。
ジョブエンコードは可能であり、トリガーとスケジューラは構成によって設定できます
Pojo Java Beanを使用して、ジョブインターフェイスを実装せずにジョブを実行できます
Cron式の詳細な使用法
フィールド許容値によって許可される特殊文字
0-59秒、 - * /
0-59、 - * /
時間0-23、 - * /
日付1-31、 - *? / LWC
1〜12ヶ月または1月 - 〜- * /
1〜7週またはSun-Sat、 - *? / LC#
年(オプション)空白のまま、1970-2099、 - * /
例:
0/5 * * *? :5秒ごとに実行します
「」文字は、すべての値を指定するために使用されます。たとえば、数分のフィールドで「「1分あたり」を意味します。
「?」キャラクターは、日付と日のフィールドでのみ使用されます。 「非実証値」を指定するために使用されます。これら2つのドメインのいずれかで何かを指定する必要がある場合に役立ちます。以下の例を見て理解するでしょう。
月の日付の2つの要素とその週の日付は、相互に排他的です。疑問符を設定して、そのフィールドを設定したくないことを示します。
「 - 」文字は、範囲を指定するために使用されます。たとえば、「10-12」は「10、11、12」を意味します。
「、「」文字は、付加価値を指定するために使用されます。たとえば、「月、水、金」とは、週のフィールドで「月、水曜日、金曜日」を意味します。
「/」文字は、増分を指定するために使用されます。たとえば、2番目のフィールドの「0/15」は、1分あたり0、15、30、45秒を意味します。 「5/15」は、分野で1時間あたり5、20、35、50を表します。シンボル ""は「/10などの前の」です。 1つの本質を忘れないでください:式の各数値フィールドは、次のような最大値と最小値のセットです。秒のセットと分フィールドは0-59、日付フィールドは1-31、月フィールドは1〜12です。文字「/」は、各文字フィールドで対応する数値を取得するのに役立ちます。たとえば、「7/6」は、月のドメインの7月にのみトリガーされ、毎年6月を意味するわけではありません。
lは、月と週のフィールドを表すことができる「最後」の省略された言葉ですが、2つのフィールドでは意味が異なります。たとえば、月のフィールドは1か月の最終日を表します。週のフィールドが「7」または「SAT」を意味する場合、数値が週のフィールドに先行する場合、「6L」などの1か月の最後の金曜日を意味します。
キャラクター「W」は、日付フィールドのみを表示することを許可します。このキャラクターは、指定された日付の最新の勤務日に使用されます。たとえば、日付フィールドに「15W」を書いた場合、それは次のことを意味します。今月の今月の最新の勤務日は今月15日です。したがって、15日が土曜日の場合、ミッションは14日にトリガーされます。 15が日曜日に良い場合、タスクは月曜日、つまり16日にトリガーされます。日付フィールドで「1W」に記入すると、1番目が土曜日であっても、タスクは次の月曜日、つまり3日のみにトリガーされます。 「W」文字によって指定された最新の営業日は、その月に渡ることはできません。文字「w」は別の値でのみ使用でき、次のような数値フィールドにすることはできません。1-15Wが間違っています。
「L」と「W」は日付フィールドで共同で使用でき、LWは月の最後の週の営業日を表します。
キャラクター「#」は、曜日のドメインにのみ表示されることが許可されています。このキャラクターは、月の特定の日を指定するために使用されます。たとえば、「6#3」とは、月の第3週の金曜日を意味します(6つの金曜日、3週目は3週目)。 「2#1」とは、月の最初の週の月曜日を意味します。 「4#5」とは、5週目の水曜日を意味します。
キャラクター「C」は、日付と日のフィールドに表示されることが許可されています。このキャラクターは、指定された「カレンダー」に依存しています。つまり、この式の値は、関連する「カレンダー」の計算結果に依存します。 「カレンダー」の関連付けがない場合、それは含まれているすべての「カレンダー」と同等です。たとえば、日付フィールドは「5c」で、関連する「カレンダー」の初日、または月の初日の最後の5日間を示します。曜日は「1C」です。これは、関連する「カレンダー」の初日、または週の初日、つまり日曜日の翌日(月曜日)を意味します。
式の例
「0 0 12 * *?」毎日正午にトリガーされた「0 15 10? * *」毎日午前10時15分にトリガーされます "0 15 10 * *?"毎日午前10時15分にトリガーされた "0 15 10 * *? *"毎日午前10時15分にトリガーされた "0/5 14 * *?2005"毎日午前10時15分にトリガーされる "0 * 14 * *?"毎日午前10時15分にトリガー「0 0/5 14 *?」毎日午後2時15分から午後2時59分にトリガーされました。毎日午後2時15分から午後2時55分にトリガーされた「0/5 14,18 *?」毎日午後2時15分から午後2時55分まで毎日5分でトリガーされます "0/5 14,18 *?" 0 0-5 14 *? "0 10,44 14?3 wed" 0 10 10 10 10 10 10 10 10 10年水曜日、毎年午後2時10分と午後2時10分、午後2時10分と午後2時10分、毎年午後2時10分と午後2時10分、午後2時10分、午後2時10分、15時まで? * Mon-Fri "0 15 10 15 *?" 0 15 10 15 *? "0 15 10 15 10 15 *?" 0 15 15 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 * 6L 2002-2005 "2002年から2005年までの毎月の最後の金曜日の午前10時15分にトリガーされました" 0 15 10? * 6#3 "毎月第3金曜日の午前10時15分にトリガー
上記の記事は、Quartzを統合してタイミングタスクのスケジューリングを実装して、私があなたと共有するすべてのコンテンツです。参照を提供できることを願っています。wulin.comをもっとサポートできることを願っています。