日程安排#
有時候需要使用定時功能來實現一些功能。例如定時發送郵件、發送推送等。
這時候需要使用Scheduled註解。
在 SpringBoot 中開啟 Schedule#
-
首先在啟動類中加上
@EnableScheduling
註解。 -
創建 ++Component++。
-
編寫 schedule 方法並打上
@Scheduled
註解。
例如:
/**
* 作者:dqn
* 創建於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 的時候觸發,即每分鐘觸發一次。
0 0 * * * ?
表示每次分到 0 的,每小時一次,也可以 * 0 * * * *
* * 3 * * ?
表示每天 3 點執行
* * 3 15 * ?
表示每個月的 15 號的 3 點執行。問號表示不確定,或者說都可以,因為星期 X和日是衝突的
* * 3 ? * 1
表示每週一的 3 點執行,相應的,日期是?號
* * 3-5 * * ?
表示每天的 3、4、5 點都執行, - 表示範圍(range)
同時還提供了 3,6,9
表示一個列表值,還有2/10
表示從 2 開始,每次遞增 10。
延時任務#
延時有兩種,開始後延時、完成後延時
fixedDelay#
fixedDelay 表示在上一次執行後延時 XX 時間後執行
fixedRate#
fixedRate 表示在上一次開始執行就計時,在 XX 時間後執行