SpringBootタスク - タイミングタスク
記事のディレクトリ
1.はじめに、タスクのタイミングに関連したノート
タイミングタスク定義を使用する点に対応する動作設定時に実行させることができます。
次の二つのアノテーションspringboot使用スケジュールされたタスクを使用することができます。@Scheduled(クーロン=「0 * * * * *」)
- (クーロン=「クーロン式」)@Scheduled:標識方法で、定期的なタイミングタスクの実行に配置され
- @EnableScheduling:タイミングタスクを開いて、タイプにマーク
2.タイミングタスクの使用シナリオ
そのような毎日/毎週/毎月サマリーログ生成、タイミング送信プッシュ情報は、タイミングデータテーブル等を生成するよう
3.cron式
cronの式は、数日、数週間、6つの値、第二のすなわち画分、数ヶ月で構成されてい スペースで区切っ
次の2つの表:https://www.bilibili.com/video/av38657363?p=96例えばプラス適切な形態2
cronの式は、7つの分野で説明:デフォルトは6です
フィールド | レンジ | 特殊文字を許可します |
---|---|---|
第2 | 0-59 | 、 - * / |
分割 | 0-59 | 、 - * / |
時間 | 0-23 | 、 - * / |
日 | 1-31 | 、 - ?* / LWC |
月 | 1-12 | 、 - * / |
週 | 0-7またはSUN-SAT(0と7日です) | 、 - ?* / LCの# |
年(オプション) | デフォルト1970-2099 | 、 - * / |
cron表現の特殊文字の説明:
特殊文字 | 意味 | 例えば |
---|---|---|
、 | 列挙、 | 0/6/8/57秒実行する0,6,8,57 * * * * *秒 |
- | インターバル | * * * * * 25〜35秒の実行25-35秒へ |
* | 任意に | 333 * * *日午前3時03分03秒に実行 |
/ | ステップ、 | * * * * * 0/5 5秒ごとに実行 |
? | 日/週マッチの競合 | 000?5月月月曜夜12時〇〇分00秒に実行 |
L | 遂に | 000?* 1L前月曜日夜12時00分○○秒毎月実行 |
# | 最初の数 | 000?* 5#2、毎月第2金曜日夜12時〇〇分00秒の実行 |
4.タイミングタスクの例
4.1タイミング@Scheduledタスク注釈付きメソッド(クーロン=「クーロン式」)
ここではいくつかのデモ、間の結果の実施に関する彼らのコメントを書き込むことができます。
/**
* Springboot任务——定时任务
*/
@Service
public class ScheduledService {
/**
* Scheduled注解中cron = ""指定cron表达式
* cron表达式中的六个值依次为:
* 几秒 几分 几时 几日 几月 周几 (用空格隔开)
* 范围分别为:
* 0-59 0-59 0-23 1-31 1-12 0-7(0和7都是周日)
* 例子:0 * * * * MON-SUN 整秒执行如 2020/2/28 17:45:00
*/
//*代表任意
@Scheduled(cron = "0 * * * * *")
public void testScheduled() {
Date t = new Date();
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//System.out.println("整秒执行"+df.format(t));
}
//整秒执行2020-02-28 16:46:00
//整秒执行2020-02-28 16:47:00
//整秒执行2020-02-28 16:48:00
//整秒执行2020-02-28 16:49:00
// /代表步长 0/5每隔5秒执行
@Scheduled(cron = "0/5 * * * * *")
public void testScheduled2() {
Date t = new Date();
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//System.out.println("测试步长符号/ 每5s执行"+df.format(t));
}
//测试步长符号/ 每5s执行2020-02-28 16:50:10
//测试步长符号/ 每5s执行2020-02-28 16:50:15
//测试步长符号/ 每5s执行2020-02-28 16:50:20
//测试步长符号/ 每5s执行2020-02-28 16:50:25
// - 代表区间 ,代表枚举 10-15,20-25表示10-15s执行且20-25s执行
@Scheduled(cron = "10-15,20-25 * * * * *")
public void testScheduled3() {
Date t = new Date();
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//System.out.println("测试区间符号-和枚举符号, 10-15s执行且20-25s执行"+df.format(t));
}
//测试区间符号-和枚举符号, 10-15s执行且20-25s执行2020-02-28 16:53:10
//测试区间符号-和枚举符号, 10-15s执行且20-25s执行2020-02-28 16:53:11
//测试区间符号-和枚举符号, 10-15s执行且20-25s执行2020-02-28 16:53:12
//测试区间符号-和枚举符号, 10-15s执行且20-25s执行2020-02-28 16:53:13
//测试区间符号-和枚举符号, 10-15s执行且20-25s执行2020-02-28 16:53:14
//测试区间符号-和枚举符号, 10-15s执行且20-25s执行2020-02-28 16:53:15
//测试区间符号-和枚举符号, 10-15s执行且20-25s执行2020-02-28 16:53:20
//测试区间符号-和枚举符号, 10-15s执行且20-25s执行2020-02-28 16:53:21
//测试区间符号-和枚举符号, 10-15s执行且20-25s执行2020-02-28 16:53:22
//测试区间符号-和枚举符号, 10-15s执行且20-25s执行2020-02-28 16:53:23
//测试区间符号-和枚举符号, 10-15s执行且20-25s执行2020-02-28 16:53:24
//测试区间符号-和枚举符号, 10-15s执行且20-25s执行2020-02-28 16:53:25
@Scheduled(cron = "0 0 2 LW * ?")
public void testScheduled4() {
Date t = new Date();
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println("测试工作日符号W"+df.format(t));
}
}
4.2 ** @ EnableScheduling **:マークは、クラスのスケジュールされたタスクを有効にします
私はクラスの打ち上げで、ここに記さ:
@EnableScheduling//开启定时任务
@SpringBootApplication
public class SpringbootTaskApplication {
public static void main(String[] args) {
SpringApplication.run(SpringbootTaskApplication.class, args);
}
}