Quartz 之 JobExecutionContext 解读

2023-11-03

项目地址:   https://github.com/yuleiqq/quartz_example/tree/master/quartz_study

 

查看源码注释可以得知:

 JobExecutionContext 是一个包含了各种上下文信息的句柄,指向执行中的JobDetail 实例 和 执行完成的Trigger实例.

 JobExecutionContext中有一个简便的方法可以获取执行上下文中的JobDataMap , 它是JobDetail 中的JobDataMap 和 Trigger 中的JobDataMap 的合并,后者的JobDataMap 会覆盖前者相同名称的值.

注意: 不要期望通过这个返回的JobDataMap 的set 方法设置 某个值 持久化到作业自身的JobDataMap ,即使 有@PersistJobDataAfterExecution .

试图更改此映射的内容通常会导致IllegalStateException 异常.

 public JobDataMap getMergedJobDataMap();

我们看下如下例子.

package com.example04;

        import org.quartz.*;
        import org.quartz.impl.StdSchedulerFactory;

/**
 * 1442554244
 * JobExecutionContext例子
 **/

public class CronTriggerExample {

    public void run () throws SchedulerException {

        //实例化调度器
        Scheduler scheduler  =StdSchedulerFactory.getDefaultScheduler();

        //实例化job
        JobDetail job1 = JobBuilder.newJob(SimpleJob.class)
                .withIdentity("job1","group1")
                //设置jobDetail值
                .usingJobData("name","tom")
                .usingJobData("email","123@qq.com")
                // 当job 没有绑定trigger时,继续保存在调度器中
                .storeDurably()
                .build();

        //若有相同名称的job ,是否替换,否则抛出异常, 使用这个方法,必须保证 isDurable=true
        scheduler.addJob(job1,false);

        //定义Contrigger
        CronTrigger cronTrigger1 = TriggerBuilder.newTrigger()
                .withIdentity("trigger1","group1")
                //设置JobDatail值
                .usingJobData("email","456@qq.com")
                .withSchedule(CronScheduleBuilder.cronSchedule(" 0/5 * * * * ? "))
                .forJob(job1)
                .build();

        scheduler.scheduleJob(cronTrigger1);

        scheduler.start();

    }

    public static void main(String[] args) throws SchedulerException {
        CronTriggerExample example = new CronTriggerExample();
        example.run();

    }
}

package com.example04;

import org.quartz.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.Date;

/**
 * @author  yulei
 */

public class SimpleJob implements Job {

    private static Logger log = LoggerFactory.getLogger(SimpleJob.class);

    public SimpleJob() {

    }

    public void execute(JobExecutionContext context) throws JobExecutionException {

        JobKey jobKey = context.getJobDetail().getKey();

        JobDataMap jobDataMap = context.getMergedJobDataMap();

        log.info("name: "+jobDataMap.getString("name")+", email: "+jobDataMap.getString("email"));
        log.info("SimpleJob says: " + jobKey + " executing at " + new Date());
    }

}

打印内容如下:

INFO] 27 一月 11:52:32.084 上午 main [org.quartz.impl.StdSchedulerFactory]
Using default implementation for ThreadExecutor

[INFO] 27 一月 11:52:32.109 上午 main [org.quartz.core.SchedulerSignalerImpl]
Initialized Scheduler Signaller of type: class org.quartz.core.SchedulerSignalerImpl

[INFO] 27 一月 11:52:32.109 上午 main [org.quartz.core.QuartzScheduler]
Quartz Scheduler v.2.3.0 created.

[INFO] 27 一月 11:52:32.110 上午 main [org.quartz.simpl.RAMJobStore]
RAMJobStore initialized.

[INFO] 27 一月 11:52:32.111 上午 main [org.quartz.core.QuartzScheduler]
Scheduler meta-data: Quartz Scheduler (v2.3.0) 'MyScheduler' with instanceId 'NON_CLUSTERED'
  Scheduler class: 'org.quartz.core.QuartzScheduler' - running locally.
  NOT STARTED.
  Currently in standby mode.
  Number of jobs executed: 0
  Using thread pool 'org.quartz.simpl.SimpleThreadPool' - with 20 threads.
  Using job-store 'org.quartz.simpl.RAMJobStore' - which does not support persistence. and is not clustered.


[INFO] 27 一月 11:52:32.112 上午 main [org.quartz.impl.StdSchedulerFactory]
Quartz scheduler 'MyScheduler' initialized from default resource file in Quartz package: 'quartz.properties'

[INFO] 27 一月 11:52:32.112 上午 main [org.quartz.impl.StdSchedulerFactory]
Quartz scheduler version: 2.3.0

[INFO] 27 一月 11:52:32.135 上午 main [org.quartz.core.QuartzScheduler]
Scheduler MyScheduler_$_NON_CLUSTERED started.

[INFO] 27 一月 11:52:35.007 上午 MyScheduler_Worker-1 [com.example04.SimpleJob]
name: tom, email: 456@qq.com

[INFO] 27 一月 11:52:35.011 上午 MyScheduler_Worker-1 [com.example04.SimpleJob]
SimpleJob says: group1.job1 executing at Mon Jan 27 11:52:35 CST 2020

由次可以看出,触发器中的JobDataMap 会覆盖JobDetail 中相同名称的key 的value 。

 

 

 

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Quartz 之 JobExecutionContext 解读 的相关文章

  • 初学者C++面向对象程序设计概念全总结最全的概念总结

    1 对象和类概念 对象 任何一个对象都应该具备两个要素 属性 行为 在C 中每个对象都有数据 体现了 属性 和函数 用来对数据进行操作 以实现某些功能 两部分组成 类 具有共性的实体的抽象 类是对象的抽象 不占有内存 对象是类的特例 即类的
  • 深度学习算法研发工程师笔试题(百度2014校园招聘)

    一 简答题 1 深度神经网络目前有哪些成功的应用 简述原因 10分 2 列举不同进程共享数据的方式 至少三种 10分 3 对于N个样本 每个样本为D维向量 采用欧式距离使用KNN做类预测 10分 1 给出预测时间复杂度 2 当N很大时 有哪
  • -20dB谱宽是什么意思?

    20dB谱宽就是信号衰减到十分之一时的频谱带宽 dB的含义 1 dB基本上是一个比例数值 也就是一种倍数的表示单位 也就是测试数据与参考标准的相对差异表示 2 计算公式上 dB 10lg P1 P2 20 lg V1 V2 P代表功率 V代
  • 凌思微新建定时器任务

    凌思微蓝牙IC LE5010A加入自己的APP循环任务 include builtin timer h define UART EVENT PERIOD 1000 MIN 10MS UINT 1MS static void ls user
  • Go开发学习

    欢迎关注 全栈工程师修炼指南 公众号 点击 下方卡片 即可关注我哟 设为 星标 每天带你 基础入门 到 进阶实践 再到 放弃学习 花开堪折直须折 莫待无花空折枝 作者主页 https www weiyigeek top 博客 https b
  • 基于改进人工蜂群算法的 K 均值聚类算法(Matlab代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 参考文献 4 Matlab代码 数据 文章讲解 1 概述 复现论文 基于以上三点改进提出
  • VUE +Element 实现多个字段值拼接

    效果截图 VUE 核心功能代码片段 获取公共通知列表 getUsers let para page this page title this filters title this listLoading true NProgress sta
  • React 在 styled-components 中使用 TailwindCss

    方法1 推荐 编译 apply 编译 Styled Components 中的 apply 将 tailwind 编译为 普通css 支持 tailwind 和 windi Babel https github com JiangWeixi
  • RSA加密算法(公钥+私钥加密)

    公开密钥加密 公开密钥加密 public key cryptography 也成为非对称加密 是密码学的一种算法 他需要两个密钥 一个是公开密钥 另一个是私有密钥 一个用作加密的时候 另一个则用作解密 明文 需要加密的内容 成为明文 密文
  • CDN原理简介

    CDN原理简介 CDN的百度百科的解释为 CDN的全称是Content Delivery Network 即内容分发网络 其基本思路是尽可能避开互联网上有可能影响数据传输速度和稳定性的瓶颈和环节 使内容传输的更快 更稳定 通过在网络各处放置
  • hive执行计划解析

    文章目录 1 hive执行流程的重要性 2 解析sql执行计划流程 2 1 大数据两类sql框架 2 2 解析sql执行计划流程详解 3 sql执行计划映射MR流程 3 1过滤类查询sql 3 2分组聚合类查询sql 3 3join类查询s
  • 读取和写入文本文件

    读取和写入文本文件 Read a Text File 的这篇文章部分描述如何使用 StreamReader 类来读取文本的文件 Write a Text File Example 1 和 Write a Text File Example
  • 上传图片到七牛云

    1 首先我们需要先创建七牛云账号 并完成认证 七牛云 一站式场景化智能视频云 2 创建自己的存储空间 第一步 点击对象存储kodo 2 进入后点击空间管理 3 创建自己的存储空间 需要注意访问控制要选择公开 4 进入个人中心 gt 密钥管理
  • ImportError: cannot import name ‘XXXA‘ from ‘XXXB‘

    ImportError cannot import name XXXA from XXXB 废话不多说直接看问题 废话不多说直接看问题 ImportError cannot import name XXXa from XXXB 当你排除拼写

随机推荐

  • 四阶行列式直接展开_01行列式的定义上海交大

    本文文字和图片非原创 来源如下 强烈推荐原视频 作者 上海交通大学 知名教授 蒋启芬 高云 崔振等 平台 网易公开课 内容 线性代数 第一讲 行列式的定义 序言 对二元一次方程组 几何意义 平面上的两条动直线 通过加减消元可以变形到下边这种
  • 如何将本地项目上传至Gitee仓库(详细教程)

    码云 Gitee 简单介绍 Git 是一个开源的分布式版本控制系统 用于敏捷高效地处理任何或小或大的项目 Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件 Git 与常用的版本控
  • C++-函数模板特化如何避免重复定义

    我正在用一个基于模板的库源代码 该库包含一些针对特定类型的模板函数特化 类模板 函数模板和模板函数特化都在头文件中 我在我的 cpp文件中 include 头文件并编译链接工程 但是为了在整个工程中使用该库 我将头文件包含在 stdafx
  • Linux——线程安全

    概念 线程安全就是在多线程运行的时候 不论线程的调度顺序怎样 最终的结果都是一样的 正确的 那么就说这些线程是安全的 要保证线程安全需要做到 对线程同步 保证同一时刻只有一个线程访问临界资源 在多线程中使用线程安全的函数 可重入函数 所谓线
  • sql语句多表查询

    问题及描述 1 学生表 Student S Sname Sage Ssex S 学生编号 Sname 学生姓名 Sage 出生年月 Ssex 学生性别 2 课程表 Course C Cname T C 课程编号 Cname 课程名称 T 教
  • 微信小程序客服功能接入指南

    一 功能介绍 1 客服消息会话入口有两个 1 小程序内 开发者在小程序内添加客服消息按钮组件 用户可在小程序内唤起客服会话页面 给小程序发消息 2 已使用过的小程序客服消息会聚合显示在微信会话 小程序客服消息 内 用户可以在小程序外查看历史
  • Windows 10 安装wsl(linux子系统)

    目录 1 简介 2 检查windows 系统版本 是否符合要求 3 安装wsl2 2中方式 3 1手动安装 3 2 应用商店安装 4 资料参考 1 简介 wsl是适用于windows环境linux子系统 支持windows 10 11和wi
  • 软件测试基础理论详解

    1 软件测试定义 软件测试 Software Testing 在规定的条件下对程序进行操作 以发现程序错误 衡量软件质量 并对其是否能满足设计要求进行评估的过程 2 软件测试工程师的素质 良好的沟通和表达能力 具有怀疑与破坏的精神 扎实的软
  • Unity实现异步加载场景

    一 创建UGUI 首先我们在LoginCanvas登入面板下面创建一个Panel 取名为LoadScreen 再在loadScreen下面创建一个Image组件 放置背景图片 然后我们再在lpadScreen下面继续创建一个Slider 这
  • jdbc C3P0容错和自动重连

    1 C3P0容错和自动重连与以下配置参数有关 breakAfterAcquireFailure true表示pool向数据库请求连接失败后标记整个pool为block并close 就算后端数据库恢复正常也不进行重连 客户端对pool的请求都
  • CentOS8基础篇14:使用源代码安装FTP软件

    一 TAR包管理工具简介 TAR Tape Archive TAR 是Linux下的包管理工具 利用tar命令可以将要备份保存的数据打包成一个扩展名为 tar的文件 以便文件的保存 需要使用时再利用tar命名进行释放即可 使用tar命令对文
  • Java面向对象编程

    下面有关JVM内存 说法错误的是 A 程序计数器是一个比较小的内存区域 用于指示当前线程所执行的字节码执行到了第几行 是线程隔离的 B Java方法执行内存模型 用于存储局部变量 操作数栈 动态链接 方法出口等信息 是线程隔离的 C 方法区
  • 自己组装电脑配置清单2022 自己组装电脑需要哪些配件

    自己组装电脑需要主板 CPU处理器 CPU散热器 内存条 显卡 硬盘 鼠标 键盘 声卡 耳机 音箱 机箱 显示器 电源等等 组装电脑怎么搭配更合适这些点很重要 http www adiannao cn du 3500左右性价比游戏型组装电脑
  • 【RPA】机器人流程自动化(RPA)概念、原理与实践

    多数人每天都会使用到一些机器人流程自动化工具 例如读取邮件和系统 计算 生成文件和报告 而在未来 那些你不想做的枯燥的工作 也许真的可以不做了 重复化 标准化的工作都可以让机器人帮你完成 本期推文特邀陈剑独家原创阐述RPA的概念 原理与实践
  • Kubernetes 的控制器模型

    文章目录 控制器模式 控制循环 控制器的配置和定义 Deployment 控制器详解 水平扩展 收缩 滚动更新 版本控制 控制器模式 本篇文章我们来看看 编排 这个 Kubernetes 项目最核心的功能吧 经过上篇文章的介绍后 你可能已经
  • redis主从-哨兵模式(windows下搭建)

    一 下载 由于redis官方并不支持windows操作系统 所以官网上是下不到的 需要到gitlab上下载 下载地址如下 https github com MicrosoftArchive redis releases 二 解压安装 将下载
  • webpack4---模块化打包工具(一)

    一 webpack4初识 1 首先先了解几个规范 ES规范 导出 export default Header 导入 import Header from header js CommonJS规范 导出 module exports Head
  • 如何快速安装和配置Node.js环境

    Node js是一种可以简化Web应用程序开发的平台 它使用JavaScript编写 并使用Chrome V8 JavaScript引擎 本文将介绍如何快速安装和配置Node js环境 为读者打开了Node js的大门 并提供了背景信息 一
  • 有趣的数据结构算法11——实现中缀表达式到后缀表达式的转换

    有趣的数据结构算法11 实现中缀表达式到后缀表达式的转换 解题思路 实现代码 GITHUB下载连接 这是学习栈的最后一篇blog了 在上一篇博客里 讲述了如何利用栈计算后缀表达式的结果 但是谁会无缘无故用后缀表达式写一个式子在那里计算呢 这
  • Quartz 之 JobExecutionContext 解读

    项目地址 https github com yuleiqq quartz example tree master quartz study 查看源码注释可以得知 JobExecutionContext 是一个包含了各种上下文信息的句柄 指向