1. 開啟springboot定時任務功能
在springboot的主啟動程序添加注解@EnableScheduling
@SpringBootApplication
@EnableScheduling
2. 創(chuàng)建定時任務
新建一個類,該類用戶處理某一業(yè)務類型的定時任務,比如商品系統(tǒng)中,商品分類的各種統(tǒng)計數(shù)據(jù)業(yè)務類CatalogCountScheduler類。注意,該類是需要交給spring容器管理的,所以需要在該類類名上貼上@Component注解。
然后就可以創(chuàng)建定時任務了,每個方法代表一個任務,在方法上貼上注解@Scheduled,比如:
/**
* 每天凌晨2點鐘執(zhí)行該定時任務
*/
@Scheduled(cron = "0 0 2 * * ?")
public void catalogContScheduled(){}
3. @Scheduled注解屬性
1. cron
| 字段 | 允許值 | 允許特殊字符 |
|---|---|---|
| 秒 | 0-59 | - * , / |
| 分 | 0-59 | - * , / |
| 小時 | 0-23 | - * , / |
| 日 | 1-31 | - * , ? / L W |
| 月 | 1-12或JAN-DEC | - * , / |
| 周 | 1-7或SUN-SAT | - * , ? / L # |
| 年 | 留空或1970-2099 | - * , / |
cron是cornexpression表達式的意思:
cornexpression表達式詳解:
完整字段:[秒] [分] [小時] [日] [月] [周] [年]
| 字段 | 允許值 | 允許特殊字符 |
|---|---|---|
| 秒 | 0-59 | - * , / |
| 分 | 0-59 | - * , / |
| 小時 | 0-23 | - * , / |
| 日 | 1-31 | - * , ? / L W |
| 月 | 1-12或JAN-DEC | - * , / |
| 周 | 1-7或SUN-SAT | - * , ? / L # |
| 年 | 留空或1970-2099 | - * , / |
注:
- *表示所有值,在分鐘里表示每一分鐘觸發(fā)。在小時,日期,月份等里面表示每一小時,每一日,每一月。
- ?表示不指定值。表示不關心當前位置設置的值。 比如不關心是周幾,則周的位置填寫??! ≈饕怯捎谌掌诟苁怯兄貜偷乃詢烧弑仨氂幸徽咴O置為?
- -表示區(qū)間。小時設置為10-12表示10,11,12點均會觸發(fā)。
- ,表示多個值。 小時設置成10,12表示10點和12點會觸發(fā)。
- / 表示遞增觸發(fā)。 5/15表示從第5秒開始,每隔15秒觸發(fā)?;蛘?/20,表示每隔20秒執(zhí)行一次。
- L 表示最后的意思。 日上表示最后一天。星期上表示星期六或7。 L前加數(shù)據(jù),表示該數(shù)據(jù)的最后一個。星期上設置6L表示最后一個星期五。 6表示星期五
- W表示離指定日期最近的工作日觸發(fā)。15W離該月15號最近的工作日觸發(fā)。
- .#表示每月的第幾個周幾。 6#3表示該月的第三個周五。
示例:
"0 0 12 * * ?" 每天中午12點觸發(fā)
"0 15 10 ? * *" 每天上午10:15觸發(fā)
"0 15 10 * * ?" 每天上午10:15觸發(fā)
"0 15 10 * * ? *" 每天上午10:15觸發(fā)
"0 15 10 * * ? 2005" 2005年的每天上午10:15觸發(fā)
"0 * 14 * * ?" 在每天下午2點到下午2:59期間的每1分鐘觸發(fā)
"0 0/5 14 * * ?" 在每天下午2點到下午2:55期間的每5分鐘觸發(fā)
"0 0/5 14,18 * * ?" 在每天下午2點到2:55期間和下午6點到6:55期間的每5分鐘觸發(fā)
"0 0-5 14 * * ?" 在每天下午2點到下午2:05期間的每1分鐘觸發(fā)
"0 10,44 14 ? 3 WED" 每年三月的星期三的下午2:10和2:44觸發(fā)
"0 15 10 ? * MON-FRI" 周一至周五的上午10:15觸發(fā)
"0 15 10 15 * ?" 每月15日上午10:15觸發(fā)
"0 15 10 L * ?" 每月最后一日的上午10:15觸發(fā)
"0 15 10 ? * 6L" 每月的最后一個星期五上午10:15觸發(fā)
"0 15 10 ? * 6L 2002-2005" 2002年至2005年的每月的最后一個星期五上午10:15觸發(fā)
"0 15 10 ? * 6#3" 每月的第三個星期五上午10:15觸發(fā)
"0 0 */2 * * ?" 每兩個小時
2. fixedRate
上一次開始執(zhí)行時間點向后延遲多少時間執(zhí)行,單位是毫秒。例如:
//上一次開始執(zhí)行時間點向后每隔20秒執(zhí)行一次。
@Scheduled(fixedRate = 20000):
3. fixedDelay
上一次執(zhí)行完畢時間點向后延遲多少時間執(zhí)行,單位是毫秒。例如:
//上一次執(zhí)行完畢時間點向后每隔20秒執(zhí)行一次。
@Scheduled(fixedDelay = 20000):
4. initialDelay
可以和fixedRate、fixedDelay組合使用。例如:
//第一次延遲6秒后執(zhí)行,之后按fixedRate的規(guī)則每20秒執(zhí)行一次。
@Scheduled(initialDelay=6000, fixedRate=20000)