了解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对象实例会被释放,释放之后将会被垃圾回收机制回收。
了解Job和JobDeatil ,JobDataMap (三)的更多相关文章
- Quartz定时任务学习(二)web应用/Quartz定时任务学习(三)属性文件和jar
web中使用Quartz 1.首先在web.xml文件中加入 如下内容(根据自己情况设定) 在web.xml中添加QuartzInitializerServlet,Quartz为能够在web应用中使用 ...
- Quartz教程三:Job与JobDetail介绍
Quartz教程三:Job与JobDetail介绍 原文链接 | 译文链接 | 翻译:nkcoder | 校对: 本系列教程由quartz-2.2.x官方文档翻译.整理而来,希望给同样对quartz感 ...
- JobDataMap 不能被序列化如何解决研究中
JobDataMap被用来保存一系列的(序列化的)对象,这些对象在Job执行时可以得到.JobDataMap是Java Map接口的一个实现,而且还增加了一些存储和读取主类型数据的便捷方法. 如果使用 ...
- [译]Quartz.Net 框架 教程(中文版)2.2.x 之第三课 更多关于Jobs和JobDetails
第三课 更多关于Jobs和JobDetails 在这二课我们已经学习到,Jobs接口非常容易实现,只有一个execute方法.我们需要再学习一些知识去理解jobs的本质,Job接口的execute方法 ...
- quartz——JobExecutionContext和JobDataMap
控制器传值,需要根据对应值创建,启动以及对定时任务的相关操作:JobExecutionContext和JobDataMap基本用法,代码待优化,主要是用法吧第一:控制器, @RequestMappin ...
- quartz的使用(三)
1.在数据源数据库中执行下载的quartz的sql语句(创建11张表),其中表头qrtz_可以在在配置文件中更改,对应表创建时更改org.quartz.jobStore.tablePrefix=qrt ...
- 常用 Gulp 插件汇总 —— 基于 Gulp 的前端集成解决方案(三)
前两篇文章讨论了 Gulp 的安装部署及基本概念,借助于 Gulp 强大的 插件生态 可以完成很多常见的和不常见的任务.本文主要汇总常用的 Gulp 插件及其基本使用,需要读者对 Gulp 有一个基本 ...
- 【原】FMDB源码阅读(三)
[原]FMDB源码阅读(三) 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 FMDB比较优秀的地方就在于对多线程的处理.所以这一篇主要是研究FMDB的多线程处理的实现.而 ...
- Jquery的点击事件,三句代码完成全选事件
先来看一下Js和Jquery的点击事件 举两个简单的例子 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN&q ...
随机推荐
- 用ps增加照片的气氛--镜头光晕
1.寻找一张图片 2.新建一个图层填充为黑色 3.选择滤镜---渲染---镜头光晕 4.选择图层模式---滤色. 编辑:千锋UI设计
- ad_imh
1. stc15 ad_1.7 9600 1t #include < #include <absacc.h> #include <stdio.h> #includ ...
- java内存性能调优编码注意
1.没有必要时请不用使用静态变量 使用Java的开发者都知道,当某个对象被定义为stataic变量所引用,这个对象所占有的内存将不会被回收.有时,开发者会将经常调用的对象或者变量定义为static,以 ...
- CentOS7:ifconfig command not found解决
https://blog.csdn.net/dandelion_drq/article/details/53503487
- java利用反射获取对象前后修改的内容(用于日志记录)
import java.beans.PropertyDescriptor; import java.lang.reflect.Field; import java.lang.reflect.Metho ...
- ABP框架系列之二十九:(Hangfire-Integration-延迟集成)
Introduction Hangfire is a compherensive background job manager. You can integrate ASP.NET Boilerpla ...
- 更改h标签的字体粗细
h1,h2,h3,h4,h5,h6{ font-weight:normal }
- c++类对象的内存分布
要想知道c++类对象的内存布局, 可以有多种方式,比如: 1)输出成员变量的偏移, 通过offsetof宏来得到 2)通过调试器查看, 比如常用的VS 1.没有数据成员的对象 class A{ }; ...
- 前端基于easyui的mvc扩展
背景 由于MVC的前端是基于jquery.validate和jquery.validate.unobtrusive来实现的,但是当我们要使用其他的ui组件且组件本身就带有完整的验证功能的话,那么要让它 ...
- C语言中的语句
• 表达式语句 表达式后加 ; 构成表达式语句. a = b+c; x+y i++ • 控制语句 完成一定的控制功能. if(...){...}else{...} ...