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>

相关文章
相关标签/搜索