springboot 整合quartz (一):基礎使用

介紹

Quartz是一個開源的做業調度框架,它徹底由Java寫成。它有不少特徵,如:數據庫支持,集羣,插件,EJB做業預構 建,JavaMail及其它,支持cron-like表達式等等。該項目已經被 Terracotta收購。git

Quartz API 介紹

Quartz API關鍵幾個接口以下:github

接口類對象:spring

  • Scheduler:跟任務調度相關的最主要的API接口。
  • Job:你指望任務調度執行的組件定義(調度器執行的內容),都必須實現該接口。
  • Trigger:定義一個指定的Job什麼時候被執行的組件,也叫觸發器。

用於建立示例的對象:數據庫

  • JobDetail:用來定義Job的實例。
  • JobBuilder:用來定義或建立JobDetail的實例,JobDetail限定了只能是Job的實例。
  • TriggerBuilder:用來定義或建立觸發器的實例。

環境

  • idea
  • maven
  • springboot

案例

入門案例-1

說多少也不如直接運行代碼出結果來的實際,那就動手了。springboot

pom.xml 配置以下:框架

<!-- quartz -->
    <dependency>
        <groupId>org.quartz-scheduler</groupId>
        <artifactId>quartz</artifactId>
    </dependency>
    <dependency>
        <groupId>org.quartz-scheduler</groupId>
        <artifactId>quartz-jobs</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context-support</artifactId>
        <version>5.0.7.RELEASE</version>
    </dependency>

job類maven

@Data
public class HelloJob implements Job {

    public void execute(JobExecutionContext context) throws JobExecutionException {
        JobDataMap jobDataMap = context.getJobDetail().getJobDataMap();
        String name = jobDataMap.get("name").toString();
        String characteristic = jobDataMap.get("characteristic").toString();

        System.out.println("name : " + name);
        System.out.println("characteristic : " + characteristic);

    }
}

QuartzTest類ide

public class QuartzTest {

    public static void main(String[] args) throws SchedulerException, ParseException {
        SchedulerFactory schedulerFactory = new StdSchedulerFactory();
        Scheduler scheduler = schedulerFactory.getScheduler();
        scheduler.start();

        // 定義job,綁定咱們的定時任務
        JobDetail job2 = newJob(HelloJob.class)
                .usingJobData("name", "張三")
                .usingJobData("characteristic", "帥3")
                .build();

        // 執行任務,用定義好的觸發器 和 任務
        scheduler.scheduleJob(job2, getTrigger6());

    }

    /**
     * 觸發器當即觸發,而後每隔2秒 觸發一次,22:55:00:
     */
    private static Trigger getTrigger1() {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");

        //定義一個任務觸發器
        return newTrigger()
                .withIdentity("job2", "group2")
                //定點觸發
                //.startAt(sdf.parse("2018-09-27 10:27:00"))
                // 五秒鐘後觸發
                .startAt(DateBuilder.futureDate(5, DateBuilder.IntervalUnit.SECOND))
                .withSchedule(simpleSchedule()
                        .withIntervalInSeconds(2)
                        .repeatForever())
                //.withRepeatCount(0))
                .endAt(DateBuilder.dateOf(22, 55, 0))
                .build();
    }

運行測試類,結果以下:(恭喜你,成功,接下來,就是深刻學習了)學習

10:29:11.012 [MyOneQuartzScheduler_Worker-1] DEBUG org.quartz.core.JobRunShell - Calling execute on job DEFAULT.6da64b5bd2ee-f1562ba3-b8fa-436d-848e-d6e8ea39c26d
name : 張三
characteristic : 帥3

源碼地址

github地址<br/>測試

參考文檔

quartz中文文檔<br>

相關文章
相關標籤/搜索