スケジュール#
機能を実現するために、タイミング機能が必要な場合があります。例えば、定期的にメールを送信したり、プッシュ通知を送信したりする場合などです。
この場合、Scheduledアノテーションを使用する必要があります。
SpringBoot でのスケジュールの有効化#
-
起動クラスに
@EnableScheduling
アノテーションを追加する必要があります。 -
++Component++ を作成します。
-
スケジュールメソッドを作成し、
@Scheduled
アノテーションを付けます。
例えば
/**
* author dqn
* created at 2018/8/2 - 17:33
*/
@Component
public class TestSchedule {
Logger logger = LoggerFactory.getLogger(TestSchedule.class);
/**
* cron * * * * * *
* 秒 分 時 日 月 曜日X
* 0-59 0-59 0-24 1-31 1-12 1-7
* まだ一つ空いている位があります、年、1970-2099
* 定期タスク、cron式に一致するときにトリガーされます
*/
@Scheduled(cron = "0 * * * * *")
public void testCommon(){
logger.info("common "+Instant.now().toString());
}
/**
* fixedDelay後に実行されます
*/
@Scheduled(fixedDelay = 1000)
public void testFixDelay(){
logger.info("delay "+Instant.now().toString());
}
/**
* 初回はinitDelay後に実行され、その後はfixedDelay後に実行されます
*/
@Scheduled(initialDelay = 1000,fixedDelay = 1000)
public void testInitDelay(){
logger.info("delay "+Instant.now().toString());
}
/**
* 前回の実行後にfixedRate後に実行されます
*/
@Scheduled(fixedRate = 2000)
public void testRateDelay(){
logger.info("rate "+Instant.now().toString());
}
}
アノテーションの設定#
タイマータスク#
最初のタイプはタイマータスクで、@Scheduled
のcron
値に式を追加して、特定の時間にメソッドを実行します。
cron-like expression#
式は通常次のようになります: * * * * * * *
合計 7 つの位置があり、最後の位置は省略することができます。つまり、6 つの位置だけを設定することもできます。
左から右に順番に、秒、分、時、日、月、曜日 X、年です。
それぞれの値は次のようになります:
- 0-59 秒
- 0-59 分
- 0-23 時
- 1-31 日
- 1-12 月
- 1-7 曜日
- 1970-2099 年
例#
0 * * * * ?
は、秒が 0 の時にトリガーされ、つまり 1 分ごとに実行されます。
0 0 * * * ?
は、分が 0 の時にトリガーされ、つまり 1 時間ごとに実行されます。* 0 * * * *
でも同じです。
* * 3 * * ?
は、毎日 3 時に実行されます。
* * 3 15 * ?
は、毎月 15 日の 3 時に実行されます。?
は不確定またはどちらでも可能を意味します。なぜなら、曜日 Xと日が競合するからです。
* * 3 ? * 1
は、毎週月曜日の 3 時に実行されます。対応する日付は?
です。
* * 3-5 * * ?
は、毎日 3 時、4 時、5 時に実行されます。**-** は範囲(range)を表します。
また、3,6,9
はリストの値を表し、2/10
は 2 から始まり、10 ずつ増加します。
遅延タスク#
遅延には 2 種類あります。開始後の遅延と完了後の遅延です。
fixedDelay#
fixedDelay は、前回の実行後に指定した時間だけ遅延してから実行されます。
fixedRate#
fixedRate は、前回の開始時から計時を開始し、指定した時間後に実行されます。