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);}}

转载于:https://www.cnblogs.com/zhou-test/p/9720186.html

浅谈JobExecutionContext JobDataMap相关推荐

  1. 浅谈MySQL存储引擎-InnoDBMyISAM

    浅谈MySQL存储引擎-InnoDB&MyISAM 存储引擎在MySQL的逻辑架构中位于第三层,负责MySQL中的数据的存储和提取.MySQL存储引擎有很多,不同的存储引擎保存数据和索引的方式 ...

  2. 【大话设计模式】——浅谈设计模式基础

    初学设计模式给我最大的感受是:人类真是伟大啊!单单是设计模式的基础课程就让我感受到了强烈的生活气息. 个人感觉<大话设计模式>这本书写的真好.让貌似非常晦涩难懂的设计模式变的生活化.趣味化 ...

  3. 学校计算机机房好处,浅谈学校计算机机房维护

    浅谈学校计算机机房维护    现在的学校机房都配置了数量较多的计算机,而且机房的使用非常频繁.对于怎样维护好计算机,特别是计算机软件系统,对广大计算机教师来说是一个很重要且非常现实的问题.下面就本人在 ...

  4. java 中的单元测试_浅谈Java 中的单元测试

    单元测试编写 Junit 单元测试框架 对于Java语言而言,其单元测试框架,有Junit和TestNG这两种, 下面是一个典型的JUnit测试类的结构 package com.example.dem ...

  5. mybatis与php,浅谈mybatis中的#和$的区别

    浅谈mybatis中的#和$的区别 发布于 2016-07-30 11:14:47 | 236 次阅读 | 评论: 0 | 来源: 网友投递 MyBatis 基于Java的持久层框架MyBatis 本 ...

  6. 浅谈GCC预编译头技术

    浅谈GCC预编译头技术 文/jorge --谨以此文,悼念我等待MinGW编译时逝去的那些时间. 其 实刚开始编程的时候,我是丝毫不重视编译速度之类的问题的,原因很简单,因为那时我用BASICA.后来 ...

  7. 【笔记】震惊!世上最接地气的字符串浅谈(HASH+KMP)

    震惊!世上最接地气的字符串浅谈(HASH+KMP) 笔者过于垃圾,肯定会有些错的地方,欢迎各位巨佬指正,感激不尽! 引用:LYD的蓝书,一本通,DFC的讲稿,网上各路巨佬 Luguo id: 章鱼那个 ...

  8. 浅谈几种区块链网络攻击以及防御方案之其它网络攻击

    旧博文,搬到 csdn 原文:http://rebootcat.com/2020/04/16/network_attack_of_blockchain_other_attack/ 写在前面的话 自比特 ...

  9. 浅谈几种区块链网络攻击以及防御方案之拒绝服务攻击

    旧博文,搬到 csdn 原文:http://rebootcat.com/2020/04/14/network_attack_of_blockchain_ddos_attack/ 写在前面的话 自比特币 ...

最新文章

  1. 消息队列服务器安装失败,开发环境下的RocketMQ完整安装步骤、错误分析以及示例...
  2. OpenGL textures combined组合纹理的实例
  3. linux安装docker部署java项目
  4. 关系数据库——视图/存储过程/触发器
  5. 为什么python除法结果会有小数点0_关于python:为什么整数除法会在许多脚本语言中向下取整?...
  6. Jeecg 初级入门
  7. PPP Over Frame Relay配置
  8. 深度学习之Loss不下降原因分析篇
  9. php面试题之一——HTML+CSS(基础部分)
  10. 搜狐Linux运维工程师面试真题曝光
  11. 编写合格的C代码(1):通过编译选项将特定警告视为错误
  12. Zookeeper-单机/集群安装
  13. 5. 软件工程 (一个大尺度的问题)
  14. How to solve the lossless offline problem of Spring Cloud Alibaba service instance in Kubernetes
  15. 网站刷关键词_如何提升网站关键词及长尾词的排名 - 百度排名提升软件
  16. [刷题]leetcode\278_第一个错误的版本
  17. 2017“CCF科学技术奖”全公布,6位获奖人带来独家经验分享
  18. Deprecated Gradle features were used in this build, making it incompatible with Gradle
  19. py android 知乎,python知乎爬虫(最新)
  20. 随笔-Unity部分版本加载AB资源时崩溃问题

热门文章

  1. keil c语言循环嵌套,keil软件中C语言嵌套汇编
  2. mysql触发器中访问mssql数据表_[数据库]一个利用触发器(trigger)实现数据库表的审计功能(audit)的例子--针对ms sql实现...
  3. bugzilla dbd-mysql_Windows上配置bugzilla.doc
  4. 经典SQL语句大全(转)
  5. SQL 查询表的第一条数据 和 最后一条数据
  6. 21-python-time,random模块的应用
  7. 如何突破Windows环境限制打开“命令提示符”
  8. Android数据库一些源码分析
  9. 让你此生难成大器的七宗罪
  10. 安装配置nagios