定义JobExecutionContext:
当Schedule调用一个Job时,就会将JobExecutionContext传递给Job的exceute()方法。
Job能够通过JobExecutionContext对象访问到Quartz运行时候的环境以及Job本身的数据明细。
JobDataMap:
定义:
在进行任务调度时,JobDataMap储存在JobExecutionContext中,非常方便。
在JobDateMap可以用来装载任何可序列化的数据对象,当Job实例对象被执行时这些参数对象会传递给它。
JobDataMap实现了JDK的Map接口,并且添加了一些非常方便的的方法用来存取基本的数据类型。
获取JobDataMap的方法:
从Map中直接获取:
先创建一个HelloJob类实现Job接口
代码如下:
package com.unitop.Demo01;
import org.quartz.*;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
* 创建一个job类
*/
public class HelloJob implements Job{
public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
Date date =new Date();
SimpleDateFormat simpleDateFormat =new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println("执行的时间是:"+simpleDateFormat.format(date));
// System.out.println(i+" :Hello Word");
//通过Map中key和value的方式获取JobDataMap中的值。
JobKey key = jobExecutionContext.getJobDetail().getKey();
System.out.println(key.getName()+key.getGroup()+key.getClass());
TriggerKey key1 = jobExecutionContext.getTrigger().getKey();
System.out.println(key1.getGroup()+key1.getName()+key1.getClass());
System.out.println("获取JobDataMap");
JobDataMap jobDataMap = jobExecutionContext.getJobDetail().getJobDataMap();
System.out.println(jobDataMap.getString("message"));
System.out.println(jobDataMap.getFloat("FloatJbValue"));
JobDataMap jobDataMap1 = jobExecutionContext.getTrigger().getJobDataMap();
System.out.println(jobDataMap1.getString("message"));
System.out.println(jobDataMap1.getDouble("DoubleValue"));
System.out.println("通过第二种方式获取JobDataMap");
JobDataMap mergedJobDataMap = jobExecutionContext.getMergedJobDataMap();
System.out.println(mergedJobDataMap.getString("message"));//当JobDetail中和Trrigger存在相同的key是 会优先获取Trigger中的key的值
System.out.println(mergedJobDataMap.getDouble("DoubleValue"));
System.out.println(mergedJobDataMap.getFloat("FloatJbValue"));
}
}
2.创建一个Schedule类命名为HelloSchedule:
代码如下:
public void test02()throws Exception{
//创建一个JobDetai实例对象:
JobDetail jobDetail = JobBuilder.newJob(HelloJob.class).withIdentity("myjob","group1")
.usingJobData("message","hello myjob1").usingJobData("FloatJbValue",3.14F).build();//写入jobDataMap对象。
Trigger trigger =TriggerBuilder.newTrigger().withIdentity("trigger","group1")
.usingJobData("message","hello mytrigger").usingJobData("DoubleValue",2.0D).startNow()//写入JobDataMap对象。
.withSchedule(SimpleScheduleBuilder.simpleSchedule().withIntervalInSeconds(2).repeatForever()).build();
SchedulerFactory schedulerFactory =new StdSchedulerFactory();
Scheduler scheduler = schedulerFactory.getScheduler();
scheduler.start();
Date date =new Date();
SimpleDateFormat simpleDateFormat =new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println(simpleDateFormat.format(date));
scheduler.scheduleJob(jobDetail,trigger);
}
2.从Job实现类中添加对象的setter方法对应JobDataMap的键值(Quartz默认采用JobFactory实现类在初始化job对象时会自动的调用这些sette方法)
在创建HelloJob的时候添加对应的setter属性。
private String message;
private Float FloatJbValue;
private Double DoubleValue;
public void setMessage(String message) {
this.message = message;
}
public void setFloatJbValue(Float floatJbValue) {
FloatJbValue = floatJbValue;
}
public void setDoubleValue(Double doubleValue) {
DoubleValue = doubleValue;
}
在对应的job实现类的execute对应的方法中使用setter方法可以直接获取到JobDataMap的属性值,
HelloJob代码如下:
public class HelloJob implements Job{
private String message;
private Float FloatJbValue;
private Double DoubleValue;
public void setMessage(String message) {
this.message = message;
}
public void setFloatJbValue(Float floatJbValue) {
FloatJbValue = floatJbValue;
}
public void setDoubleValue(Double doubleValue) {
DoubleValue = doubleValue;
}
public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
System.out.println("通过第三种方式获取JobDataMap对象");
System.out.println(message);
System.out.println(FloatJbValue);
System.out.println(DoubleValue);
}
}
到此为止:这是我们获取JobDataMap中的属性的值的所有的方法