まず、SpringBootベースのプロジェクトをビルドし、次にアプリケーションでタイマータスク関数@EnableSchedulingを有効にする必要があります。
スケジュールされたタスクを開始する
package com.ltf;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.scheduling.annotation.EnableScheduling;
@SpringBootApplication
@EnableScheduling
public class MakeaFortuneApplication {
public static void main(String[] args) {
SpringApplication.run(MakeaFortuneApplication.class, args);
}
}
その中で、@ EnableSchedulingアノテーションの機能は、アノテーション@Scheduledのタスクを見つけてバックグラウンドで実行することです。
タイミングタスク固有の実装クラス
次に、時間指定されたタスクを作成します
package com.ltf.scheduler;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import com.ltf.dao.UserDao;
/**
* 系统定时任务类
* @author xhz
*
*/
@Component
public class Scheduler {
private static final SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm:ss");
@Autowired
private UserDao userDao;
/**
* 每隔5秒执行一次
*/
@Scheduled(fixedRate = 5000)
public void testTask1() {
System.out.println("定时任务1执行时间:" + dateFormat.format(new Date()));
}
/**
* 每天15:54执行
*/
@Scheduled(cron = "0 54 15 ? * *")
public void testTask2() {
System.out.println("定时任务2执行时间:" + dateFormat.format(new Date()));
}
/**
* 每天凌晨执行一次
*/
@Scheduled(cron = "0 0 0 * * ?")
public void updateSignInState() {
userDao.updateSignInStateForUser();
System.out.println("【修改用户签到状态】定时任务执行时间:" + dateFormat.format(new Date()));
}
}
Spring Bootを実行すると、出力は次のようになり、現在の時刻が5秒ごとに出力されます。
注: 時間指定タスクのクラスにコメント:@Componentを追加し、時間指定タスクを開始するには、アノテーション@Scheduledを特定の時間指定タスクメソッドに追加する必要があります。
@Scheduledパラメータの説明
@Scheduled(fixedRate = 5000):最後の実行時刻から5 秒後に再度実行します。
@Scheduled(FIXEDDELAY = 5000) :実行し、再び5で秒最後の実行後に、
@Scheduled(initialDelay = 1000、fixedDelay = 5000):最初の実行は1秒遅延し、最後の実行が完了すると5 秒で再び実行されます。
@Scheduled(cron = "* * * * *?"):cronルールに従って実行します。
CronTrigger
SimpleTriggerの完全に指定された時間間隔の定期的な起動スケジュールではなく、カレンダーベースのコンセプトが必要な場合は、CronTriggersがSimpleTriggerよりも役立つことがよくあります。CronTriggerでは、「毎週金曜日の正午」、「毎営業日9:30」、「毎週月曜日の朝、水曜日、金曜日の9:00と10:00に5分ごと」などのトリガースケジュールを指定できます。 。それでも、SimpleTriggerと同様に、CronTriggerは、指定されたタイムテーブルが有効になるとstartTimeを所有し、タイムテーブルが指定されると、終了時間に停止(オプション)する必要があります。
cron式
1)cron式は、CronTriggerインスタンスを構成するために使用されます。cronの表現は文字列で、実際には7つの部分式で構成され、個々の詳細のスケジュールを記述しています。これらの部分式は空白で区切られ、次のものを表します。
1.秒
2.議事録
3時間
4.月の日
5ヶ月
6.曜日
7.年(オプションのフィールド)
たとえば、「0 0 12?* WED」は毎週水曜日の午後12時に実行されます。
個々の部分式には範囲を含めることができます。たとえば、前の例( "WED")では、 "MON-FRI"、 "MON、WED、FRI"または "MON-WED、SAT"に置き換えることができます。 "*"は全体を意味します限目。
各フィールドには、次のような指定できる有効な値のセットがあります
秒(秒):0〜59の数字で表すことができます。
分(分):0〜59の数字で表すことができます。
時間(時間):0〜23の数字で表すことができます。
日(日):1〜31の数字を使用できますが、特別な月に注意してください
月(月):0〜11または文字列「JAN、FEB、MAR、APR、MAY、JUN、JUL、AUG、SEP、OCT、NOV、DEC」で表すことができます。
曜日(毎週):1〜7の数字(1 =日曜日)または文字列「SUN、MON、TUE、WED、THU、FRI、SAT」で表すことができます。
「/」:特別な単位で、「0/15」のように「毎」と表現されます。15分ごとに実行されることを意味し、「0」は「0」分から始まり、「3/20」は20分ごとを意味します1回実行、「3」は3分から実行することを意味します
「?」:月の特定の日または特定の曜日を示します
「L」:毎月または毎週使用され、月の最終日または月の最終日として表されます。たとえば、「6L」は「月の最後の金曜日」を意味します
「W」:最新の稼働日を意味します。たとえば、「月(日)」フィールドに配置された「15W」フィールドは、「今月の15日から最も近い稼働日」を意味します。
""# ":毎月n日の稼働日の" of "を指定するために使用されます。たとえば、" day-of-week "のフィールドの" 6#3 "または" FRI#3 "の内容は"第3金曜日」
2)cron式の例:
5秒に1回実行:* / 5 * * * *?
1分ごとに1回実行:0 * / 1 * * *?
毎日23:00に実行:0 0 23 * *?
毎日午前1時に実行:0 0 1 * *?
毎月1日の午前1時に実行:0 0 1 1 *?
毎月最終日の23:00に実行0 0 23 L *?
週1回、日曜日の午前1時に実行:0 0 1?* L
26、29、33ポイントで1回実行:0 26、29、33 * * *?
毎日0時、13時、18時、21時に1回実行されます。0 0 0,13,18,21 * *?