当前位置: 首页 > news >正文

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

 

相关文章:

  • linux shell编程中的数组定义、遍历
  • MySQL 的wait_timeout参数
  • 快递鸟 即时查询接口
  • mySql基础
  • MySQL存储过程、触发器 小例子
  • Linux历史及版本
  • Java面试宝典《转载》
  • Android 03 style简单介绍
  • 黑客学习之信息收集
  • 安卓屏幕旋转时,禁止Activity重新加载
  • Selenium发展史
  • scala一些符号含义总结
  • Java内部类详解
  • tomcat配置、resin配置、MySQL主从配置
  • 代理
  • 【402天】跃迁之路——程序员高效学习方法论探索系列(实验阶段159-2018.03.14)...
  • 【comparator, comparable】小总结
  • 2018天猫双11|这就是阿里云!不止有新技术,更有温暖的社会力量
  • CentOS7简单部署NFS
  • JavaScript 事件——“事件类型”中“HTML5事件”的注意要点
  • Python 反序列化安全问题(二)
  • 爱情 北京女病人
  • 将回调地狱按在地上摩擦的Promise
  • 可能是历史上最全的CC0版权可以免费商用的图片网站
  • 那些年我们用过的显示性能指标
  • 算法之不定期更新(一)(2018-04-12)
  • 消息队列系列二(IOT中消息队列的应用)
  • 云栖大讲堂Java基础入门(三)- 阿里巴巴Java开发手册介绍
  • 《天龙八部3D》Unity技术方案揭秘
  • elasticsearch-head插件安装
  • #if和#ifdef区别
  • $.ajax()参数及用法
  • $forceUpdate()函数
  • (04)odoo视图操作
  • (3)llvm ir转换过程
  • (3)选择元素——(17)练习(Exercises)
  • (70min)字节暑假实习二面(已挂)
  • (Forward) Music Player: From UI Proposal to Code
  • (四)图像的%2线性拉伸
  • (详细版)Vary: Scaling up the Vision Vocabulary for Large Vision-Language Models
  • (原創) 如何安裝Linux版本的Quartus II? (SOC) (Quartus II) (Linux) (RedHat) (VirtualBox)
  • (转)微软牛津计划介绍——屌爆了的自然数据处理解决方案(人脸/语音识别,计算机视觉与语言理解)...
  • ./configure,make,make install的作用(转)
  • .bat批处理(九):替换带有等号=的字符串的子串
  • .NET Core SkiaSharp 替代 System.Drawing.Common 的一些用法
  • .net core控制台应用程序初识
  • .NET Core日志内容详解,详解不同日志级别的区别和有关日志记录的实用工具和第三方库详解与示例
  • .net framwork4.6操作MySQL报错Character set ‘utf8mb3‘ is not supported 解决方法
  • .net MVC中使用angularJs刷新页面数据列表
  • .NET 编写一个可以异步等待循环中任何一个部分的 Awaiter
  • .NET/C# 避免调试器不小心提前计算本应延迟计算的值
  • .net6Api后台+uniapp导出Excel
  • .NET6使用MiniExcel根据数据源横向导出头部标题及数据
  • .Net7 环境安装配置
  • .NetCore 如何动态路由