在項目開發中,經常需要編寫定時任務來實現一些功能:
-
定時備份數據庫、定時發送郵件、定時清理數據、定時提醒或通知、信用卡每月還款提醒
-
未支付的訂單15分鐘之后自動取消、未確認收貨的訂單7天之后自動確認收貨
定時任務的實現:
-
Spring Task框架:Spring提供的任務調度工具,可以按照約定的時間自動執行特定的任務功能
-
Quartz框架:一個開源的任務調度框架
-
ScheduledThreadPoolExecutor:JDK8提供的定時任務執行
Cron表達式是一個字符串,由7個字段組成,使用空格隔開 ,用于指定定時任務的執行時間。也稱為七子表達式
字段 | 取值范圍 | 說明 |
---|---|---|
秒 | 0-59 | */10 |
分 | 0-59 | |
時 | 0-23 | 6-16 |
日 | 1-31 | |
月 | 1-12 | |
星期 | 0-7 | 0和7都表示星期日 |
年 | 1970~2099 | 此項非必需,可以省略 |
使用以下特殊字符來指定執行時間:
-
星號(*):表示匹配該字段的所有可能值
-
問號(?):表示不關心該字段具體的值
-
斜線(/):表示指定一個間隔
-
逗號(,):表示列舉多個值
-
連字符(-):表示指定一個范圍
Cron表達式在線生成器:在線Cron表達式生成器
?基本用法
Spring Task的使用步驟:
-
定制任務,使用
@Scheduled
@Component public class MyTask { ?// @Scheduled(cron = "0/2 * * * * ?") // 每隔2秒執行一次@Scheduled(cron = "0 0 3 * * ?") // 每天凌晨3點執行public void task1() {System.out.println("定時任務1執行了!");} ? }
-
啟用定時任務,使用
@EnableScheduling
@SpringBootApplication @EnableScheduling // 開啟定時任務 public class Springboot02QuickApplication { ?public static void main(String[] args) {SpringApplication.run(Springboot02QuickApplication.class, args);} ? }