1. 程式人生 > >SpringBoot基礎教程3-1-2 Quartz定時任務快速整合

SpringBoot基礎教程3-1-2 Quartz定時任務快速整合

1 概述

QuartzOpenSymphony開源組織在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 結束語

說點什麼呢,有任何建議,歡迎留言探討,本文原始碼

歡迎關注博主公眾號,第一時間推送最新文章

歡迎關注博主公眾號