SpringBoot基礎教程3-1-2 Quartz定時任務快速整合
阿新 • • 發佈:2018-12-14
1 概述
Quartz
是OpenSymphony
開源組織在Job scheduling
領域又一個開源專案,Quartz
可以用來建立簡單或為執行十個,百個,甚至是好幾萬個Jobs
這樣複雜的程式,儘管Quartz
框架整合了許多額外功能,但就其簡易形式看,你會發現它易用得簡直讓人受不了!
2 程式碼實現
2.1 新增依賴
<!--quartz相關依賴-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-quartz< /artifactId>
</dependency>
2.2 繼承QuartzJobBean
,實現定時任務
@DisallowConcurrentExecution //禁止任務並行
@Slf4j
public class UploadTask extends QuartzJobBean {
@Override
protected void executeInternal(JobExecutionContext jobExecutionContext){
try {
log.info("任務開始");
TimeUnit. SECONDS.sleep(6);
} catch (InterruptedException e) {
log.info("任務異常");
} finally {
log.info("任務結束");
}
}
}
2.3 Quartz
配置
@Configuration
public class QuartzConfig {
//指定了具體需要執行的類,只不過具體的方法就是我們需要實現的excuteInternal
@Bean
public JobDetail uploadTaskDetail () {
return JobBuilder.newJob(UploadTask.class)
.withIdentity("uploadTask").storeDurably()
.build();
}
//uploadTaskTrigger指定了觸發的規則
@Bean
public Trigger uploadTaskTrigger() {
CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule("*/5 * * * * ?");
return TriggerBuilder.newTrigger().forJob(uploadTaskDetail())
.withIdentity("uploadTask")
.withSchedule(scheduleBuilder)
.build();
}
}
3 cron
表示式介紹
順序 | 秒 | 分鐘 | 小時 | 日期 | 月份 | 星期 | 年(可選) |
---|---|---|---|---|---|---|---|
取值 | 0-59 | 0-59 | 0-23 | 1-30(31) | 1-12 | 1-7 | |
允許特殊字元 | , - * / | , - * / | , - * / | , - * / ? L W C | , - * / | , - * / L # C | 1970-2099 , - * / |
*:代表所有可能的值
-:指定範圍
,:列出列舉 例如在分鐘裡,"5,15"表示5分鐘和20分鐘觸發
/:指定增量 例如在分鐘裡,"3/15"表示從3分鐘開始,沒隔15分鐘執行一次
?:表示沒有具體的值,使用?要注意衝突
L:表示last,例如星期中表示7或SAT,月份中表示最後一天31或30,6L表示這個月倒數第6天,FRIL表示這個月的最後一個星期五
W:只能用在日期中,表示最接近指定天的工作日
#:只能用在星期中,表示這個月的第幾個周幾,例如6#3表示這個月的第3個週五
示例
0 * * * * ? 每1分鐘觸發一次
0 0 * * * ? 每天每1小時觸發一次
0 0 10 * * ? 每天10點觸發一次
0 * 14 * * ? 在每天下午2點到下午2:59期間的每1分鐘觸發
0 30 9 1 * ? 每月1號上午9點半
0 15 10 15 * ? 每月15日上午10:15觸發
*/5 * * * * ? 每隔5秒執行一次
0 */1 * * * ? 每隔1分鐘執行一次
0 0 5-15 * * ? 每天5-15點整點觸發
0 0/3 * * * ? 每三分鐘觸發一次
0 0 0 1 * ? 每月1號凌晨執行一次
4 測試結果
Quartz
預設執行緒池大小為10
10個執行緒序列 讀者可以註釋掉
@DisallowConcurrentExecution
看看執行結果
5 工程目錄
6 結束語
說點什麼呢,有任何建議,歡迎留言探討,本文原始碼。
歡迎關注博主公眾號,第一時間推送最新文章