2.Quartz关键概念

设计理念

执行的任务和时间规则分离,实现灵活组合1

Job2

释义:执行的任务
示例:

public class HelloJob implements Job {

    public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
        System.out.println("Hello World!");
    }
}

JobDetail

释义:Job定义,包含Job、Job的名称等信息3
示例:

//传入Class类的原因是,每次执行定时任务scheduler会通过反射创建一个新的HelloJob对象
JobDetail job = JobBuilder.newJob(HelloJob.class).withIdentity("job1","group1").build();

JobDataMap

释义:用于同一个JobDetail下,多次执行定时任务之间实现数据共享
示例:

  1. 放数据
//usingJobData即是给JobDataMap里放数据
jobDetail = JobBuilder.newJob((Class<? extends Job>) Class.forName(jobClassName)).withIdentity(name, group).usingJobData(JobDataMapKey.MY_JD_ID,jobId).build();
  1. 取数据
@DisallowConcurrentExecution
public class SayHiTask extends QuartzJobBean {
    @Override
    protected void executeInternal(JobExecutionContext jobExecutionContext) throws JobExecutionException {
        JobDataMap dataMap = jobExecutionContext.getMergedJobDataMap();
Long jobId = dataMap.getLongValue(JobDataMapKey.MY_JD_ID)
        System.out.println("say 'Hi!':"+jobId);
    }
}

Trigger

释义:触发器,可简单认为是时间规则和JobDetail的组合
示例:

//时间规则
CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule("0/30 * * * * ?");
//触发器
Trigger trigger = TriggerBuilder.newTrigger().withIdentity("trigger1","group1").startNow().withSchedule(scheduleBuilder).build();

Scheduler

释义:调度器。调度即取选并执行,选出此刻应该触发的Triggers,并执行其对应的任务
示例:

//调度:把任务和时间规则绑定起来
scheduler.scheduleJob(job,trigger);

概念的相互关系

Quartz概念相互关系


  1. 个人认为实际系统中需要组合的场景不多 ↩︎

  2. 在springboot-quartz-starter中对应的是QuartzJobBean ↩︎

  3. 把要执行的任务单独分离,这种设计好处是:(1)复用Job代码(2)开发分工解耦 ↩︎

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值