浅谈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 ...
随机推荐
- 吴裕雄--天生自然深度学习TensorBoard可视化:projector_MNIST
import os import tensorflow as tf from tensorflow.examples.tutorials.mnist import input_data from te ...
- 记录华为、魅族手机无法打印 Log 日志的问题
http://yifeng.studio/2017/02/26/android-meizu-huawei-not-log/ 实测 MEIZU PRO 6 :打开[设置]中的[开发者选项],页面底部找到 ...
- Java常用面试题总结
1.多线程实现方式 2.cookie和session区别 3.数据加密 4.接口并发 5.常用的集合类 6.遍历集合方式 7.接口和抽象类 8.#和$区别 9.防止sql注入 10.springMvc ...
- vector内部的实现1
写vector的内部方法 #include<vector> using std::vector; //写一个动态内存 class CA{ int a; public: CA(int i){ ...
- Canvas 橡皮擦效果
引子 解决了第一个问题图像灰度处理之后,接着就是做擦除的效果. Origin My GitHub 思路 一开始想到 Canvas 的画布可以相互覆盖的特性,彩色原图作为背景,灰度图渲染到 Canvas ...
- python uiautomator2 新版本2.4.6之watcher的玩法
最近将uiautomator2升级到最新版本了,运行之前的脚本发现涉及watcher部分的全部报错,大家来看看新版本的watcher如何玩 用法举例 注册监控 # 常用写法,注册匿名监控 d.watc ...
- CodeForces 993A Two Squares(数学 几何)
https://codeforces.com/problemset/problem/993/A 题意: 给你两个矩形,第一行是一个正面表示的矩形,第二个是一个旋转四十五度角的矩形,问这两个矩形是否相交 ...
- Java之异常的处理(throws)
import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java. ...
- Educational Codeforces Round 64(Unrated for Div.1+Div. 2)
什么垃圾比赛,A题说的什么鬼楞是没看懂.就我只会BD(其实C是个大水题二分),垃圾游戏,技不如人,肝败吓疯,告辞,口胡了E就睡觉了. B 很容易发现,存在一种方案,使得相同字母连在一起,然后发现,当字 ...
- python处理nii格式文件
网上已经有很多代码了,但是注释的都不全,看起来很费解,我自己加了一些注释,重新发出来,尽可能的通俗易懂 读取前需要先安装库 pip install nibabel pip install matplo ...