了解Job和JobDeatil ,JobDataMap (三)

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

一:定义

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

 

相关文章
xxl-job执行器启动报错读取不到配置文件Could not resolve placeholder ‘xxl.job.executor.address‘ in value “${xxl.job
有几个不用配置的属性,也要写出来,不填值就行 但是最后一个日志天数得写,写个-1。不然空字符串无法转成数字
|
缓存 Java 应用服务中间件
一文带你使用xxl-job定时任务
将调度行为抽象形成“调度中心”公共平台,而平台自身并不承担业务逻辑,“调度中心”负责发起调度请求。 将任务抽象成分散的JobHandler,交由“执行器”统一管理,“执行器”负责接收调度请求并执行对应的JobHandler中业务逻辑。 因此,“调度”和“任务”两部分可以相互解耦,提高系统整体稳定性和扩展性;
2610 0
一文带你使用xxl-job定时任务
|
存储 SQL BI
xxl-job 介绍与使用
XXL-JOB是一个分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品线,开箱即用。
184 0
|
Kubernetes API 调度
【K8S系列】深入解析Job(下)
【K8S系列】深入解析Job
204 0
|
Kubernetes API Python
【K8S系列】深入解析Job(上))
【K8S系列】深入解析Job
503 0
|
SQL 调度 数据库
|
缓存 Java 调度
xxl-job的原理(1)
xxl-job的原理(1)
118 0
|
JavaScript Java 关系型数据库
xxl-job搭建
xxl-job搭建
294 0
|
监控 IDE Java
XXL-JOB任务调度详解
XXL-JOB任务调度详解
707 0
|
存储 安全 Java
Quartz-Job 详解
Quartz-Job 详解
106 0