了解Job和JobDeatil ,JobDataMap (三)

一:定义

Job:实现任务逻辑的接口。

JobDeatil:JobDeatil为Job提供了许多设置属性,以及JobDataMap成员变量属性,他用来储存特定的Job实例状态信息,调度器需要使用JobDeatil对象添加Job实例。

二:

Job接口源码:

public interface Job {

    void execute(JobExecutionContext context)
        throws JobExecutionException;

}

Job有且只有一个方法:execute()   负责执行业务逻辑。

JobExecutionContext:包含job执行的上下文。里面包含了一个重要的类(JobDataMap :主要是包含我们想要输入的参数)。

这个方法要抛出一个异常 JobExecutionException。

 

JobDeatil的重要属性:

    name:任务的名称。

    group:任务所在的组(默认值:DEFAULT)。

    jobClass:任务的实现类。

    jobDataMap:传参的作用。

  代码是上一节的代码:

 实现代码:JobDetail jobDetail = JobBuilder.newJob(JobClass.class).withIdentity("jobName","group").build();

JobDetail jobDetail = JobBuilder.newJob(JobClass.class).withIdentity("jobName","group").build();
        System.out.println(jobDetail.getKey().getName());//jobName
        System.out.println(jobDetail.getKey().getGroup());//group
        System.out.println(jobDetail.getJobClass().getName());//quartz.JobClass

 

 

jobDataMap

JobDataMap中可以包含不限量的(序列化的)数据对象,在job实例执行的时候,可以使用其中的数据;JobDataMap是Java Map接口的一个实现,额外增加了一些便于存取基本类型的数据的方法。

实现:

JobDetail jobDetail = JobBuilder.newJob(JobClass.class).withIdentity("jobName", "group")
                .usingJobData("Double", 2.0D)
                .usingJobData("String", "字符串").build();
        System.out.println(jobDetail.getJobDataMap().getString("String"));//字符串
        System.out.println(jobDetail.getJobDataMap().getDoubleValue("Double"));//2.0

在job的执行过程中,可以从JobDataMap中取出数据

 

第二种获取的:

 是在JobClass里设置属性,这里的属性名称必须和jobDetail设置的key值相同;

 

package quartz;

import java.text.SimpleDateFormat;
import java.util.Date;

import org.quartz.Job;
import org.quartz.JobDataMap;
import org.quartz.JobDetail;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.quartz.JobKey;

public class JobClass implements Job {
    private String stringValue;
    private Double doubleValue;

    public String getStringValue() {
        return stringValue;
    }

    public void setStringValue(String stringValue) {
        this.stringValue = stringValue;
    }

    public Double getDoubleValue() {
        return doubleValue;
    }

    public void setDoubleValue(Double doubleValue) {
        this.doubleValue = doubleValue;
    }

    public void execute(JobExecutionContext arg0) throws JobExecutionException {
        System.out.println(stringValue + doubleValue);
        /*
         * JobKey jobKey=arg0.getJobDetail().getKey();
         * System.out.println(jobKey.getGroup()+jobKey.getName());
         */

        /*
         * Date date=new Date(); SimpleDateFormat sf=new SimpleDateFormat(
         * "yyyy-MM-dd HH:mm:ss"); System.out.println("当前时间为:"+sf.format(date));
         * // 编写业务逻辑 System.out.println("hello Quartz");
         */
        /*
         * JobDataMap jobDataMap=arg0.getJobDetail().getJobDataMap();
         * System.out.println(jobDataMap.getDouble("Double"));
         * System.out.println(jobDataMap.getString("String"));
         */


    }

}

 

  

三:生命周期

每次在调度器在执行job的时候,他是在execute()方法前创建一个新的job实例。当调用完之后,关联的job对象实例会被释放,释放之后将会被垃圾回收机制回收。

 

posted @ 2017-08-21 11:29  NAYNEHC  阅读(993)  评论(0编辑  收藏  举报