了解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 ...
随机推荐
- [Bat]如何彻底关闭每个盘符默认的共享$(即使重启也有效)
Windows启动时都会默认打开admin$ ipc$ 和每个盘符的共享,对于不必要的默认共享,一般都会把它取消掉,可当又需要打开此默认共享时,又该从哪里设置呢,一般来说有两个地方,MSDOS命令和计 ...
- vue中鼠标移入字体下面显示颜色并改变字体颜色的问题
<template> <div class="smart_nav" :class="{'fixedTop':fixedTop}"> &l ...
- 顺序队列(C语言)
#define Queue_MAX_SIZE 20 #define OK 1 #define ERROR 0 #include <stdio.h> #include <stdlib. ...
- sshpass 使用方法
首先下载sshpass并且安装 $ tar -zxvf sshpass-1.06.tar.gz $ cd sshpass-1.06 $ ./configure --prefix=/usr/local/ ...
- Makefile入门
相信大家对makefile都不陌生,在Linux下编写程序基本都离不开makefile的编写,我们都知道多个.c文件经过编译器编译后得到多个.o文件,这些文件是互相独立的,但最终我们要得到一个可正常运 ...
- The First BoKe
A.如何看待师生关系 说起师生关系,我们每个人都有不同的见解,但无一例外,师者,传道授业解惑也,老师的为学生传授的才能知识,是学生今后发展的宝贵财富,无论是从哪方面,都可以对学生起着积极向上的作用.而 ...
- Hive记录-Beeline常用操作命令
Beeline和其他工具有一些不同,执行查询都是正常的SQL输入,但是如果是一些管理的命令, 比如进行连接,中断,退出,执行Beeline命令需要带上"!",不需要终止符.常用命令 ...
- Request参数值自动去空格
/// <summary> /// TypeTrimHelper /// </summary> public static class TypeTrimHelper { /// ...
- VS从数据库表生成Model代码
1.工具——扩展和更新——安装下列插件 2.如图所示,在项目或者MODEL文件夹下添加 3.如图所示,生成了一个datanase.11 4.打开该文件后,将数据库连接字符串改为你自己项目中WebCof ...
- Android开发 - Retrofit 2 使用自签名的HTTPS证书进行API请求
为了确保数据传输的安全,现在越来越多的应用使用Https的方式来进行数据传输,使用https有很多有点,比如: HTTPS协议是由SSL+HTTP协议构建的可进行加密传输.身份认证的网络协议,要比ht ...