了解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 ...
随机推荐
- zabbix邮件自动预警
Zabbix报警 自定义脚本报警 报警大致过程 item数据采集--->触发器由阈值触发带级别的信息-->触发动作发送邮件预警 1. 发送邮件脚本 1)安装sendEmail(参考Linu ...
- 实战Python实现BT种子转化为磁力链接
经常看电影的朋友肯定对BT种子并不陌生,但是BT种子文件相对磁力链来说存储不方便,而且在网站上存放BT文件容易引起版权纠纷,而磁力链相对来说则风险小一些. 将BT种子转换为占用空间更小,分享更方便的磁 ...
- 重读<<大话设计模式>>读书笔记一
面向对象编程几大原则: 1.简单工厂模式 解读:根据不同条件,动态创建合适的对象. 目的: 解决对象创建问题 举例: 计算器根据不同情况,创建适合的对象来处理数据. 2.策略模式 解读:也是根据不同的 ...
- JavaBean四个作用域范围
使用 useBeans的scope属性可以用来指定javabean的作用范围 page //仅在当前页面有效 request //可以通过HttpRequest.getAttribute()方法取得J ...
- Axure RP Xmind
官方网站下载地址:http://www.axure.com/download 下载地址:http://www.iaxure.com/2941.html 汉化安装:http://www.iaxure.c ...
- Mac 下 Java 多版本切换
Step 1: 安装 jdk1.7 jdk1.8 路径如下: + /Library/Java/JavaVirtualMachines/jdk1.7.0_80.jdk + /Library/Java/J ...
- 配置docker官方源并用yum安装docker
一.docker的官方安装文档: https://docs.docker.com/engine/installation/linux/centos/ 由docker给的文档可以看出它也只是去配置了一个 ...
- idea集成maven
1 下载maven并解压 至 http://archive.apache.org/dist/maven/maven-3/下载zip包,下载后的包如下: 解压到安装目录下:如:D:\software,解 ...
- [Mac]如何让两个窗口各占半个屏幕
OS X中的拆分视图El Capitan或更高版本允许您使用两个应用程序填充Mac屏幕,而无需手动移动和调整窗口大小. 进入拆分视图 按住 窗口左上角的全屏按钮 . 当您按住按钮时,窗口会缩小,您可 ...
- kill 结束进程
kill 支持的信号 kill -1 重启进程 kill -9 终止进程 pkill 和 killall 的区别在于pkill 可以踢终端用户 pkill -9 -t tty1