JobExecutionContext是什么?

  • 当Scheduler调用一个Job,就会将JobExecutionContext传递给Job的 execute() 方法;
  • Job能通过JobExecutionContext对象访问到Quartz运行时候的环境以及Job本身的明细数据。

JobDataMap是什么?

  • 在进行任务调度时JobDataMap存储在JobExecutionContext中,非常方便获取
  • JobDataMap可以用来装载任何可以序列化的数据对象,当Job实例对象被执行时,这些参数对象会传递给它。
  • JobDataMap实现了JDK的Map 接口,并且添加了一些非常方便的方法用来存储基本数据类型。

JobDataMap的获取方式

  • 方式一:从Map里面直接获取
import java.text.NumberFormat;
import java.text.SimpleDateFormat;
import java.util.Date; import org.quartz.Job;
import org.quartz.JobDataMap;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.quartz.JobKey;
import org.quartz.TriggerKey; public class HelloJob implements Job{ public void execute(JobExecutionContext context) throws JobExecutionException { //打印当前的执行时间
Date date = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String currentTime = sdf.format(date);
System.out.println("Current Exec Time : "+currentTime);
//编写具体的业务逻辑

JobKey key = context.getJobDetail().getKey();
System.out.println("my name is :"+key.getName()+" and group is:" +key.getGroup());
TriggerKey trkey = context.getTrigger().getKey();
System.out.println("my name is: "+trkey.getName()+" and group is:"+trkey.getGroup());
JobDataMap dataMap = context.getJobDetail().getJobDataMap();
JobDataMap tdataMap = context.getTrigger().getJobDataMap();
String jobMessage = dataMap.getString("message");
Float FloatJobValue = dataMap.getFloat("FloatJobValue");
String triggerMessage = tdataMap.getString("message");
Double DoubleTriggerValue = tdataMap.getDouble("DoubleTriggerValue"
);

System.out.println(jobMessage);
System.out.println(FloatJobValue);
System.out.println(triggerMessage);
System.out.println(DoubleTriggerValue);

} }
import org.quartz.JobBuilder;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.SchedulerFactory;
import org.quartz.SimpleScheduleBuilder;
import org.quartz.Trigger;
import org.quartz.TriggerBuilder;
import org.quartz.impl.StdSchedulerFactory; public class HelloScheduler {
public static void main(String[] args) throws SchedulerException {
//创建一个JobDetail实例,将该实例与HelloJob class绑定
JobDetail jobDetail = JobBuilder.newJob(HelloJob.class)
.withIdentity("myJob", "group1")
.usingJobData("message", "hello myJob1")
.usingJobData("FloatJobValue", 3.14f).build();
//创建一个Trigger实例,定义该Job立即执行,并且每隔2秒钟重复执行一次,直到永远
Trigger trigger = TriggerBuilder.newTrigger()
.withIdentity("myTrigger", "group1")
.usingJobData("message", "hello myTrigger1")
.usingJobData("DoubleTriggerValue", 2.0D)
.startNow().
withSchedule(SimpleScheduleBuilder.simpleSchedule().withIntervalInSeconds(2).repeatForever())
.build();
//创建Scheduler实例
SchedulerFactory sfact = new StdSchedulerFactory();
Scheduler scheduler = sfact.getScheduler();
scheduler.start();
scheduler.scheduleJob(jobDetail, trigger);
} }
import java.text.NumberFormat;
import java.text.SimpleDateFormat;
import java.util.Date; import org.quartz.Job;
import org.quartz.JobDataMap;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.quartz.JobKey;
import org.quartz.TriggerKey; public class HelloJob implements Job{ public void execute(JobExecutionContext context) throws JobExecutionException { //打印当前的执行时间
Date date = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String currentTime = sdf.format(date);
System.out.println("Current Exec Time : "+currentTime);
//编写具体的业务逻辑 JobKey key = context.getJobDetail().getKey();
System.out.println("my name is :"+key.getName()+" and group is:" +key.getGroup());
TriggerKey trkey = context.getTrigger().getKey();
System.out.println("my name is: "+trkey.getName()+" and group is:"+trkey.getGroup()); JobDataMap dataMap = context.getMergedJobDataMap(); String jobMessage = dataMap.getString("message");
Float FloatJobValue = dataMap.getFloat("FloatJobValue");
String triggerMessage = dataMap.getString("message");
Double DoubleTriggerValue = dataMap.getDouble("DoubleTriggerValue"); System.out.println(jobMessage);
System.out.println(FloatJobValue);
System.out.println(triggerMessage);
System.out.println(DoubleTriggerValue);
} }

方式二:Job实现类中添加setter方法对应JobDataMap的键值(Quartz框架默认的JobFactory 实现类在初始化job实例对象时会自动地调用这些setter方法)

package com.test.quartz.myquartz;

import java.text.SimpleDateFormat;
import java.util.Date;
import org.quartz.Job;
import org.quartz.JobDataMap;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.quartz.JobKey;
import org.quartz.TriggerKey; public class HelloJob implements Job{ private String message;
private Float FloatJobValue;
private Double DoubleTriggerValue; public void setMessage(String message) {
this.message = message;
}
public void setFloatJobValue(Float floatJobValue) {
FloatJobValue = floatJobValue;
}
public void setDoubleTriggerValue(Double doubleTriggerValue) {
DoubleTriggerValue = doubleTriggerValue;
}
public void execute(JobExecutionContext context) throws JobExecutionException { //打印当前的执行时间
Date date = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String currentTime = sdf.format(date);
System.out.println("Current Exec Time : "+currentTime);
//编写具体的业务逻辑 JobKey key = context.getJobDetail().getKey();
System.out.println("my name is :"+key.getName()+" and group is:" +key.getGroup());
TriggerKey trkey = context.getTrigger().getKey();
System.out.println("my name is: "+trkey.getName()+" and group is:"+trkey.getGroup()); System.out.println("message is :" +message);
System.out.println("FloatJobValue is :" +FloatJobValue);
System.out.println("DoubleTriggerValue is :" +
DoubleTriggerValue);
} }

浅谈JobExecutionContext & JobDataMap的更多相关文章

  1. 浅谈JobExecutionContext&JobDataMap

  2. 浅谈JobExecutionContext与JobDataMap

    1.JobExecutionContext简介 (1)当Scheduler调用一个Job,就会将JobExecutionContext传递给job的execute方法 quartz无法调用job的有参 ...

  3. 浅谈Trigger(SimpleTrigger&CronTrigger)

     1.Trigger是什么 Quartz中的触发器用来告诉调度程序作业什么时候触发,即Trigger对象是用来触发执行job的.  2.Quartz中的Trigger  3.触发器通用属性: JobK ...

  4. 浅谈 Fragment 生命周期

    版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 源码:AndroidDemo/Fragment 文中如有纰漏,欢迎大家留言指出. Fragment 是在 Android 3.0 中 ...

  5. 浅谈 LayoutInflater

    浅谈 LayoutInflater 版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 源码:AndroidDemo/View 文中如有纰漏,欢迎大家留言指出. 在 Android 的 ...

  6. 浅谈Java的throw与throws

    转载:http://blog.csdn.net/luoweifu/article/details/10721543 我进行了一些加工,不是本人原创但比原博主要更完善~ 浅谈Java异常 以前虽然知道一 ...

  7. 浅谈SQL注入风险 - 一个Login拿下Server

    前两天,带着学生们学习了简单的ASP.NET MVC,通过ADO.NET方式连接数据库,实现增删改查. 可能有一部分学生提前预习过,在我写登录SQL的时候,他们鄙视我说:“老师你这SQL有注入,随便都 ...

  8. 浅谈WebService的版本兼容性设计

    在现在大型的项目或者软件开发中,一般都会有很多种终端, PC端比如Winform.WebForm,移动端,比如各种Native客户端(iOS, Android, WP),Html5等,我们要满足以上所 ...

  9. 浅谈angular2+ionic2

    浅谈angular2+ionic2   前言: 不要用angular的语法去写angular2,有人说二者就像Java和JavaScript的区别.   1. 项目所用:angular2+ionic2 ...

随机推荐

  1. Python验证6174猜想

    num=int(input()) c=num while c!=6174:     digits=list(str(c))     digits.sort(reverse=True)#排列最大数和最小 ...

  2. python中os模块的常用方法

    1.os模块:os模块在python中包含普遍的操作系统功能,下面列出了一些在os模块中比较有用的部分. os.sep可以取代操作系统特定的路径分隔符.windows下为 “\\” os.name字符 ...

  3. Data总结

    getTime() 方法可返回距 1970 年 1 月 1 日之间的毫秒数 var d = new Date(); var n = d.getTime(); //一长串数字

  4. ubuntu14 编译tensorflow C++ 接口

    tensorflow1.11 bazel 0.15.2 protobuf 3.6.0 eigen 3.3.5 wget -t 0 -c https://github.com/eigenteam/eig ...

  5. mybatis自动扫描的时候,接口跟xml文件的名字最好能够一一对应

    事实证明这是十分有好处的,当然,即便你不这么做,它也不一定会报invalid bound statement (not found),因为你不知道从哪儿拷来的配置文件可能从其他的地方做了配置,但是这么 ...

  6. 把cifar数据转换为图片

    参考 https://gist.github.com/fzliu/64821d31816bce595a4bbd98588b37f5 """ make_cifar10.py ...

  7. HDU-1875 畅通工程再续(最小生成树+判断是否存在)

    http://acm.hdu.edu.cn/showproblem.php?pid=1875 Problem Description 相信大家都听说一个“百岛湖”的地方吧,百岛湖的居民生活在不同的小岛 ...

  8. Tire树(字典树)

    from:https://www.cnblogs.com/justinh/p/7716421.html Trie,又经常叫前缀树,字典树等等.它有很多变种,如后缀树,Radix Tree/Trie,P ...

  9. MTF的倾斜边缘计算方法

    光学系统性能的衡量方法有很多,常见的有点扩散函数法.瑞利判断法.点 列图法.光学传递函数(MTF)法等,其中 MTF 法在光学系统和镜头加工制造中 使用 最为广泛.MTF 曲线真实的反映了成像系统将物 ...

  10. Django的View(视图)-settings源码的解析-模板层-模板语法

    FBV与CBV 视图函数并不只是指函数,也可以是类 FBV:基于函数的视图,类似面向函数式编程 CBV:基于类的视图,类似面向对象编程 研究解析render源码: render:返回html页面:并且 ...