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

1 概述

QuartzOpenSymphony開源組織在Job scheduling領域又一個開源項目,Quartz能夠用來建立簡單或爲運行十個,百個,甚至是好幾萬個Jobs這樣複雜的程序,儘管Quartz框架整合了許多額外功能,但就其簡易形式看,你會發現它易用得簡直讓人受不了!java

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個週五

示例git

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默認線程池大小爲10github

10個線程串行 讀者能夠註釋掉@DisallowConcurrentExecution看看運行結果spring

5 工程目錄

6 結束語

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


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

歡迎關注博主公衆號

相關文章
相關標籤/搜索