Quartz任务调度简介---03(浅谈JobExecutionContext)

定义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中的属性的值的所有的方法

猜你喜欢

转载自blog.csdn.net/weixin_37546725/article/details/81413872