quartz任务调度框架使用及源码讲解

常用任务调度组件介绍

1. quartz(最新2.3.1版本)

quartz中,关键组成部分为:Job、Trigger、Scheduler

  • Scheduler: 调度程序维护作业详细信息(JobDetail)和触发器的注册表。一旦注册,调度程序将负责在相关的触发器触发时(调度时间到达时)执行作业。
  • Job:调度程序当触发器触发时,具体执行的作业任务。
  • Triiger:控制某个具体作业任务执行的规律,如什么时候开始执行,什么时候结束执行,期间执行间隔什么(每秒/分钟/小时等)。

1.1 Job与JobDetail介绍

job是调度器调度执行的具体任务,JobDetail是对这个job任务进行具体的修饰,比如这个任务的基本描述(description),唯一标识(JobKey)等信息。

1.1.1 Job

Job是一个接口,里面只有一个方法:execute(JobExecutionContext context)

 public interface Job {

    void execute(JobExecutionContext context)
        throws JobExecutionException;

}

任何需要任务调取程序执行的任务类都需要实现Job接口,execute(JobExecutionContext context)方法中实现具体任务。如图中MyJob类实现Job接口: public class MyJob implements Job {

public class MyJob implements Job {
    
    public void execute(JobExecutionContext jobExecutionContext) {
            JobKey jobKey=jobExecutionContext.getJobDetail().getKey();
            System.out.println(new SimpleDateFormat("yyyyMMddhhmmsssSSS").format(new Date())+":执行"+ jobKey.getName()+":"+jobKey.getGroup());
    }
}

myJob作业就是打印任务详情(JobDetail下面将介绍)。

1.1.2 JobDetail介绍

之前介绍过,任务调度程序Schedule必须是作业详细信息(JobDetail)和触发器,而JobDetail又是对Job(如MyJob)信息的具体修饰。

JobDetail的是一个接口,其实现类只有一个:

JobDetail可以通过JobBuilder类的build方法进行创建(最终创建的是JobDetailmple),JobBuilder结构如下:

在通过build()创建jobDetail之前,可以通过 newJob()方法管理具体的作业任务(如MyJob),设置描述信息widthDescription()、唯一标识withdIdentity(),执行数据usingJobData()等。

下面是创建JobDetail的代码:

            JobDetail jobDetail = JobBuilder.newJob(MyJob.class)
                    .withDescription("my first job")
                    .withIdentity("jobName", "jobGroupName")
                    .build();

截止为止,我们已经对Quartz中三要素之一:job与JobDetail 有了一个了解,那么如何控制作业的执行,将有下面Trigger去实现。

1.2 Trigger介绍

Trigger就是一个触发器,控制某一任务具体在什么时候触发执行,比如在某一时间点, 或者在某一时间段,执行几次,执行间隔等。

Trigger实现有如下六种,其中已经实现类:CalendarIntervalTriggerImpl, CronTriggerImpl, DailyTimeIntervalTriggerImpl, SimpleTriggerImpl

1.2.1 SimpleTriggerImple 简单触发器

           根据其名字子可知,简单的触发器,是触发器类型中最简单的一种,其只能用于在给定的时间点触发作业,并可选地在指定的时间间隔内重复。下面是我创建一个SimpleTriggerImple:

  Trigger trigger = TriggerBuilder.newTrigger()//1创建TriggerBuilder
                    .withIdentity("triggerName", "triggerGroupName")//2定义触发器唯一标识
                    .withSchedule(repeatSecondlyForever())//3-1设置执行触发时间
                    .startAt(date)//3-2设置开始时间
                    .endAt(end)//3-2设置结束时间
                    .build();//4通过2-3的数据,生成SimpleTriggerBuilder

其中第2步,通过设置trigger的名字和分组生成唯一标识TriggerKey 源码:

 public TriggerBuilder<T> withIdentity(String name, String group) {
        key = new TriggerKey(name, group);
        return this;
    }

重点第3步,通过设置不同的ScheduleBuilder,如果是生成SimpleTriggerImple,那这边必须是

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值