Spring Boot 定時任務 Quartz 使用教程


Quartz是一個完全由java編寫的開源作業調度框架,他使用非常簡單。本章主要講解 Quartz在Spring Boot 中的使用。

  1. 快速集成 Quartz
  2. 介紹 Quartz 幾個主要技術點
  3. Quartz 在 Spring Boot 的配置
  4. Quartz 在 Spring Boot 中整合 Mybatis

本着一篇文章一個示例的原則,2、3、4 將在下一章節說明

本項目源碼下載

1 新建 Spring Boot Maven 示例工程項目

注意:是用來 IDEA 開發工具

  1. File > New > Project,如下圖選擇 Spring Initializr 然后點擊 【Next】下一步
  2. 填寫 GroupId(包名)、Artifact(項目名) 即可。點擊 下一步
    groupId=com.fishpro
    artifactId=quartz
  3. 選擇依賴 Spring Web Starter 前面打鈎。
  4. 項目名設置為 spring-boot-study-quartz.

2 依賴引入 Pom

<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-quartz</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

3 使用 Quartz

3.1 在啟動文件中編寫一個簡單的使用

QuartzApplication 中直接編寫一啟動關閉類代碼

@SpringBootApplication
public class QuartzApplication {

    public static void main(String[] args) {
        SpringApplication.run(QuartzApplication.class, args);
        try {
            // Grab the Scheduler instance from the Factory
            Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();

            //啟動
            scheduler.start();
            //關閉
            scheduler.shutdown();

        } catch (SchedulerException se) {
            se.printStackTrace();
        }
    }
}

運行在控制台觀察結果

2019-08-08 15:09:01.313  INFO 21565 --- [           main] org.quartz.impl.StdSchedulerFactory      : Quartz scheduler 'DefaultQuartzScheduler' initialized from default resource file in Quartz package: 'quartz.properties'
2019-08-08 15:09:01.313  INFO 21565 --- [           main] org.quartz.impl.StdSchedulerFactory      : Quartz scheduler version: 2.3.1
2019-08-08 15:09:01.314  INFO 21565 --- [           main] org.quartz.core.QuartzScheduler          : Scheduler DefaultQuartzScheduler_$_NON_CLUSTERED started.
2019-08-08 15:09:01.314  INFO 21565 --- [           main] org.quartz.core.QuartzScheduler          : Scheduler DefaultQuartzScheduler_$_NON_CLUSTERED shutting down.
2019-08-08 15:09:01.314  INFO 21565 --- [           main] org.quartz.core.QuartzScheduler          : Scheduler DefaultQuartzScheduler_$_NON_CLUSTERED paused.
2019-08-08 15:09:01.314  INFO 21565 --- [           main] org.quartz.core.QuartzScheduler          : Scheduler DefaultQuartzScheduler_$_NON_CLUSTERED shutdown complete.

3.2 使用 Job 和 Trigger

  1. 新建一個 Job 類 WelcomeJob
  2. 在啟動類中調用他
    WelcomeJob (路徑 src/main/java/com/fishpro/quartz/job/WelcomeJob.java)
public class WelcomeJob implements Job {

    @Override
    public void execute(JobExecutionContext arg0) throws JobExecutionException {
       System.out.println("這是一個quartz 任務");
    }
}

QuartzApplication (路徑 src/main/java/com/fishpro/quartz/QuartzApplication.java)

@SpringBootApplication
public class QuartzApplication {

    public static void main(String[] args) {
        SpringApplication.run(QuartzApplication.class, args);
        try {
            // Grab the Scheduler instance from the Factory
            Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();

            //啟動
            scheduler.start();
            //新建一個 Job WelcomeJob
            JobDetail job = JobBuilder.newJob(WelcomeJob.class)
                    .withIdentity("mySimpleJob", "simpleGroup")
                    .build();

            // 觸發器 定義多長時間觸發 JobDetail
            Trigger trigger = org.quartz.TriggerBuilder.newTrigger()
                    .withIdentity("simpleTrigger", "simpleGroup")
                    .startNow()
                    .withSchedule(simpleSchedule()
                            .withIntervalInSeconds(10)
                            .repeatForever())
                    .build();
            scheduler.scheduleJob(job,trigger);
            //關閉
            //scheduler.shutdown();

        } catch (SchedulerException se) {
            se.printStackTrace();
        }
    }
}

運行結果

2019-08-08 16:46:36.599  INFO 21695 --- [           main] org.quartz.impl.StdSchedulerFactory      : Quartz scheduler 'DefaultQuartzScheduler' initialized from default resource file in Quartz package: 'quartz.properties'
2019-08-08 16:46:36.599  INFO 21695 --- [           main] org.quartz.impl.StdSchedulerFactory      : Quartz scheduler version: 2.3.1
2019-08-08 16:46:36.599  INFO 21695 --- [           main] org.quartz.core.QuartzScheduler          : Scheduler DefaultQuartzScheduler_$_NON_CLUSTERED started.
這是一個quartz 任務
這是一個quartz 任務
這是一個quartz 任務
這是一個quartz 任務
這是一個quartz 任務
這是一個quartz 任務
這是一個quartz 任務
這是一個quartz 任務
這是一個quartz 任務

本項目源碼下載

如果您覺得本系列示例對您有幫助,請點擊右上角按鈕 watch 以示支持謝謝


參考

http://www.quartz-scheduler.org/documentation/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM