浅谈JobExecutionContext & JobDataMap
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的更多相关文章
- 浅谈JobExecutionContext&JobDataMap
- 浅谈JobExecutionContext与JobDataMap
1.JobExecutionContext简介 (1)当Scheduler调用一个Job,就会将JobExecutionContext传递给job的execute方法 quartz无法调用job的有参 ...
- 浅谈Trigger(SimpleTrigger&CronTrigger)
1.Trigger是什么 Quartz中的触发器用来告诉调度程序作业什么时候触发,即Trigger对象是用来触发执行job的. 2.Quartz中的Trigger 3.触发器通用属性: JobK ...
- 浅谈 Fragment 生命周期
版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 源码:AndroidDemo/Fragment 文中如有纰漏,欢迎大家留言指出. Fragment 是在 Android 3.0 中 ...
- 浅谈 LayoutInflater
浅谈 LayoutInflater 版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 源码:AndroidDemo/View 文中如有纰漏,欢迎大家留言指出. 在 Android 的 ...
- 浅谈Java的throw与throws
转载:http://blog.csdn.net/luoweifu/article/details/10721543 我进行了一些加工,不是本人原创但比原博主要更完善~ 浅谈Java异常 以前虽然知道一 ...
- 浅谈SQL注入风险 - 一个Login拿下Server
前两天,带着学生们学习了简单的ASP.NET MVC,通过ADO.NET方式连接数据库,实现增删改查. 可能有一部分学生提前预习过,在我写登录SQL的时候,他们鄙视我说:“老师你这SQL有注入,随便都 ...
- 浅谈WebService的版本兼容性设计
在现在大型的项目或者软件开发中,一般都会有很多种终端, PC端比如Winform.WebForm,移动端,比如各种Native客户端(iOS, Android, WP),Html5等,我们要满足以上所 ...
- 浅谈angular2+ionic2
浅谈angular2+ionic2 前言: 不要用angular的语法去写angular2,有人说二者就像Java和JavaScript的区别. 1. 项目所用:angular2+ionic2 ...
随机推荐
- 【转载】解决Cannot download "https://github.com/sass/node-sass/releases/download...问题
因很早做了一个小demo,并且在其他成熟的电脑上(node配置好的)下载依赖包没什么问题,最近就在新的电脑上配置好所有东西后,去下载这个demo的依赖包,就出现了node-sass无法正常解析的问题, ...
- win10环境下pyinstaller打包pytorch遇到的问题及解决方案
pytorch-python源码生成windows的应用程序(.exe),报错OSError: could not get source code Failed to execute script h ...
- python基础,if判断
一.计算机基础知识: 1.计算机基本组成:主板+CPU+内存 (CPU:主频,核数(16) 内存:大小,型号,主频 显卡:显存,位宽) 2.计算机最低层:电子电路,只能识别0和1. 二.pyt ...
- 嵌入式linux学习笔记
1.溢出:两个数相加,如果最高位的进位和此高位的进位不同,则产生溢出. 2.进位和溢出的概念不一样. 3.预取(取得是编译后得到的机器代码)-->译码-->执行 4.ARM的汇编指令长度是 ...
- HDU 1257最少拦截系统[动态规划]
传送门:http://acm.hdu.edu.cn/showproblem.php?pid=1257 最 ...
- Activity组件(三):通过对象实现信息添加及展示
在对组件进行注册时,只注册了EditText,却忘记了Button,导致程序一直闪退 输入信息 点击添加 成功跳转页面,并将数据传递 User.java package com.example.reg ...
- servlet 上传文件
java protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException ...
- java类为什么要实现Serializable接口
什么是Serializable接口? 一个对象序列化的接口.一个类只有实现了Serializable接口,它的对象才能被序列化. 什么是序列化? 将对象的状态信息转换为可以存储或传输的形式的过程. 在 ...
- linux版本neo4j安装配置教程
https://blog.csdn.net/weixin_44293236/article/details/89467489
- Office.MsoLanguageID枚举常量(采用API函数取出)
msoLanguageIDAfrikaans (&H436) msoLanguageIDAlbanian (&H41C) msoLanguageIDAmharic (&H45E ...