Spring Bootは@Scheduledを使用してタイマータスクを実装します

まず、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(ini​​tialDelay = 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 * *?

 

おすすめ

転載: blog.csdn.net/qq_35393693/article/details/104879882