Quartz的简单使用

一、Quartz简介

Quartz是一个完全由java编写的轻量级开源作业调度框架,几乎包含了了所有的定时功能,它可以应用到任何java系统中,他可以持久化我们的定时任务

二、简单的使用

1、创建maven项目,引入依赖

        <dependency>
            <groupId>org.quartz-scheduler</groupId>
            <artifactId>quartz</artifactId>
            <version>2.2.1</version>
        </dependency>

2、使用Quartz API

public class QuartzSimpleDemo {
    public static void main(String[] args) throws SchedulerException, InterruptedException {
        //通过任务调度器工厂创建任务调度器
        SchedulerFactory schedulerFactory = new StdSchedulerFactory();
        Scheduler scheduler = schedulerFactory.getScheduler();

        //创建任务调度模型
        ScheduleBuilder scheduleBuilder = SimpleScheduleBuilder.simpleSchedule()
                .withIntervalInSeconds(5)//执行时间间隔是5秒
                .repeatForever();//一直执行,可以被调度器中断

        //定义触发器,定义触发条件
        Trigger trigger = TriggerBuilder.newTrigger()
                .withIdentity("trigger1","myGroup1")//设置触发器的id和group
                .withSchedule(scheduleBuilder)//设置使用的调度模型
                .startNow()//一加入scheduler就执行
                .build();

        //定义任务,做任务的是MyJob.execute()方法
        JobDetail jobDetail = JobBuilder.newJob(MyJob.class)
                .withIdentity("job1","myGroup2")//设置任务的id和group
                .usingJobData("name","test my job")//任务中传递参数,底层就是个map
                .build();

        //将任务加入调度器
        scheduler.scheduleJob(jobDetail,trigger);
        //调度器调度任务
        scheduler.start();

        Thread.sleep(10000);
        //调度器关闭,true表示等待任务全部完成,false反之
        scheduler.shutdown(true);
    }
}

class MyJob implements Job{
    public void execute(JobExecutionContext context) throws JobExecutionException {
        //通过context获取JobDetail
        JobDetail jobDetail = context.getJobDetail();
        //通过context获取trigger
        Trigger trigger = context.getTrigger();
        System.out.println("hello world");
    }
}

3、说明
Scheduler:调度器,是Quartz的核心,包括下列方法(未列全),源码中每种方法都有详细的说明
这里写图片描述

ScheduleBuilder:这里有如下四种
这里写图片描述
本例子中是使用的最简单的一种,每一种的功能和使用方法在源码和官方文档中都有详细的介绍。
Trigger:触发器,withIdentity(String,String)设置触发器的唯一标识和设置触发器的分组。我们可以通过startAt()和endAt设置任务触发时间和结束时间。在这段时间之外不会触发任务。withPriority()可以设置任务的优先级。有如下实现类
这里写图片描述
JobDetail:任务的详细内容,必须设置执行任务的类,withIdentity(String,String)设置任务的唯一标识和设置任务的分组。
其他:Trigger.usingJobData()和JobDetail.()usingJobData的作用都一样。
设置id和group的作用就是为了调度器更好的管理和调度任务,sheduler会提供一些对整组操作的API。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值