JobExecutionContext是什么?

  • 当Scheduler调用一个Job,就会将JobExecutionContext传递给Job的 execute() 方法;
  • Job能通过JobExecutionContext对象访问到Quartz运行时候的环境以及Job本身的明细数据。

JobDataMap是什么?

  • 在进行任务调度时JobDataMap存储在JobExecutionContext中,非常方便获取
  • JobDataMap可以用来装载任何可以序列化的数据对象,当Job实例对象被执行时,这些参数对象会传递给它。
  • JobDataMap实现了JDK的Map 接口,并且添加了一些非常方便的方法用来存储基本数据类型。

JobDataMap的获取方式

  • 方式一:从Map里面直接获取
import java.text.NumberFormat;
import java.text.SimpleDateFormat;
import java.util.Date; import org.quartz.Job;
import org.quartz.JobDataMap;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.quartz.JobKey;
import org.quartz.TriggerKey; public class HelloJob implements Job{ public void execute(JobExecutionContext context) throws JobExecutionException { //打印当前的执行时间
Date date = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String currentTime = sdf.format(date);
System.out.println("Current Exec Time : "+currentTime);
//编写具体的业务逻辑

JobKey key = context.getJobDetail().getKey();
System.out.println("my name is :"+key.getName()+" and group is:" +key.getGroup());
TriggerKey trkey = context.getTrigger().getKey();
System.out.println("my name is: "+trkey.getName()+" and group is:"+trkey.getGroup());
JobDataMap dataMap = context.getJobDetail().getJobDataMap();
JobDataMap tdataMap = context.getTrigger().getJobDataMap();
String jobMessage = dataMap.getString("message");
Float FloatJobValue = dataMap.getFloat("FloatJobValue");
String triggerMessage = tdataMap.getString("message");
Double DoubleTriggerValue = tdataMap.getDouble("DoubleTriggerValue"
);

System.out.println(jobMessage);
System.out.println(FloatJobValue);
System.out.println(triggerMessage);
System.out.println(DoubleTriggerValue);

} }
import org.quartz.JobBuilder;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.SchedulerFactory;
import org.quartz.SimpleScheduleBuilder;
import org.quartz.Trigger;
import org.quartz.TriggerBuilder;
import org.quartz.impl.StdSchedulerFactory; public class HelloScheduler {
public static void main(String[] args) throws SchedulerException {
//创建一个JobDetail实例,将该实例与HelloJob class绑定
JobDetail jobDetail = JobBuilder.newJob(HelloJob.class)
.withIdentity("myJob", "group1")
.usingJobData("message", "hello myJob1")
.usingJobData("FloatJobValue", 3.14f).build();
//创建一个Trigger实例,定义该Job立即执行,并且每隔2秒钟重复执行一次,直到永远
Trigger trigger = TriggerBuilder.newTrigger()
.withIdentity("myTrigger", "group1")
.usingJobData("message", "hello myTrigger1")
.usingJobData("DoubleTriggerValue", 2.0D)
.startNow().
withSchedule(SimpleScheduleBuilder.simpleSchedule().withIntervalInSeconds(2).repeatForever())
.build();
//创建Scheduler实例
SchedulerFactory sfact = new StdSchedulerFactory();
Scheduler scheduler = sfact.getScheduler();
scheduler.start();
scheduler.scheduleJob(jobDetail, trigger);
} }
import java.text.NumberFormat;
import java.text.SimpleDateFormat;
import java.util.Date; import org.quartz.Job;
import org.quartz.JobDataMap;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.quartz.JobKey;
import org.quartz.TriggerKey; public class HelloJob implements Job{ public void execute(JobExecutionContext context) throws JobExecutionException { //打印当前的执行时间
Date date = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String currentTime = sdf.format(date);
System.out.println("Current Exec Time : "+currentTime);
//编写具体的业务逻辑 JobKey key = context.getJobDetail().getKey();
System.out.println("my name is :"+key.getName()+" and group is:" +key.getGroup());
TriggerKey trkey = context.getTrigger().getKey();
System.out.println("my name is: "+trkey.getName()+" and group is:"+trkey.getGroup()); JobDataMap dataMap = context.getMergedJobDataMap(); String jobMessage = dataMap.getString("message");
Float FloatJobValue = dataMap.getFloat("FloatJobValue");
String triggerMessage = dataMap.getString("message");
Double DoubleTriggerValue = dataMap.getDouble("DoubleTriggerValue"); System.out.println(jobMessage);
System.out.println(FloatJobValue);
System.out.println(triggerMessage);
System.out.println(DoubleTriggerValue);
} }

方式二:Job实现类中添加setter方法对应JobDataMap的键值(Quartz框架默认的JobFactory 实现类在初始化job实例对象时会自动地调用这些setter方法)

package com.test.quartz.myquartz;

import java.text.SimpleDateFormat;
import java.util.Date;
import org.quartz.Job;
import org.quartz.JobDataMap;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.quartz.JobKey;
import org.quartz.TriggerKey; public class HelloJob implements Job{ private String message;
private Float FloatJobValue;
private Double DoubleTriggerValue; public void setMessage(String message) {
this.message = message;
}
public void setFloatJobValue(Float floatJobValue) {
FloatJobValue = floatJobValue;
}
public void setDoubleTriggerValue(Double doubleTriggerValue) {
DoubleTriggerValue = doubleTriggerValue;
}
public void execute(JobExecutionContext context) throws JobExecutionException { //打印当前的执行时间
Date date = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String currentTime = sdf.format(date);
System.out.println("Current Exec Time : "+currentTime);
//编写具体的业务逻辑 JobKey key = context.getJobDetail().getKey();
System.out.println("my name is :"+key.getName()+" and group is:" +key.getGroup());
TriggerKey trkey = context.getTrigger().getKey();
System.out.println("my name is: "+trkey.getName()+" and group is:"+trkey.getGroup()); System.out.println("message is :" +message);
System.out.println("FloatJobValue is :" +FloatJobValue);
System.out.println("DoubleTriggerValue is :" +
DoubleTriggerValue);
} }

最新文章

  1. Eclipse 常用快捷键 (动画讲解)
  2. 1Z0-053 争议题目解析577
  3. 在CSS中定义a:link、a:visited、a:hover、a:active顺序
  4. ADO.NET 读取Excel文件,并作数据源
  5. Android Fragment 真正的完全解析(下)
  6. 解剖SQLSERVER 第十六篇 OrcaMDF RawDatabase --MDF文件的瑞士军刀(译)
  7. Unity3D shader简介
  8. ODTwithODAC认识与安装图解
  9. 高斯消元 分析 && 模板 (转载)
  10. [原]Unity3D深入浅出 - 新版动画系统(Mecanim)
  11. 使用WebBrowser的记录
  12. power designer中查看表sql去掉字段属性双引号设置
  13. Android方法的传递值及其改变
  14. qs.stringify和JSON.stringify的使用和区别
  15. Linux主机之间ssh免密登录配置方法
  16. [AI]SKLearn章1 快速入门
  17. [OpenCV] Install OpenCV 3.4 with DNN
  18. python发送requests请求时,使用登录的token值,作为下一个接口的请求头信息
  19. 第五次Scrum冲刺
  20. 整除分块学习笔记+[CQOI2007]余数求和(洛谷P2261,BZOJ1257)

热门文章

  1. UML-领域模型-定义
  2. nfs 支持ipv6
  3. P2P平台疯狂爆雷后,你的生活受到影响了吗?
  4. Unicode的认识
  5. JS - ES5与ES6面向对象编程
  6. 基础篇四:Ngnix安装
  7. 一个搜索框的小demo
  8. sequelize 应用hook 实现对分表的访问
  9. AI动作捕捉技术,会让制造业大幅度降低成本吗?
  10. SpringBoot1.X /2.X使用@Component注解注入为java.lang.NullPointException 问题小结