• 了解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对象实例会被释放,释放之后将会被垃圾回收机制回收。

  • 相关阅读:
    岁月静好
    一代才女林徽因 人生若只如初见
    HTML5手机网站开发页面宽度解决方案
    上帝是公平的
    我一直在坚持,你呢?
    让生命更美丽!
    网页跳转,可以任意规定延迟显示的时间
    !important的用法
    小站初建
    GTD之图表
  • 原文地址:https://www.cnblogs.com/hellokitty1/p/7403420.html
Copyright © 2020-2023  润新知