Quartz---JobDataMap使用的两种方式

任务调度执行原理图:

JobDataMap的使用

JobDataMap是Quartz调度器中的一个重要组件,主要用于存储和传递与作业(Job)相关的数据。它是一个实现了Java Map接口的对象,可以用来保存一系列的序列化的对象。这些对象在作业执行时可以被获取并使用。

JobDataMap的主要特点包括:

  1. 它可以存储任何可以序列化的数据对象。这意味着你可以将任何类型的对象(只要它们可以被序列化)放入JobDataMap中,并在作业执行时获取这些对象。
  2. JobDataMap实现了JDK的Map接口,并添加了一些便捷的方法来存取基本数据类型。这使得操作数据变得更加方便和高效。
  3. 当使用持久化的JobStore时,需要注意存放在JobDataMap中的内容。因为放入JobDataMap中的内容将被序列化,有时可能会出现类型转换问题。标准Java类型通常很安全,但对于其他类型,如果在序列化过程中改变了类的定义,可能会导致兼容性问题。
  4. JobDataMap可以与触发器(Trigger)相关联。对于每次独立的触发,可以为作业提供不同的输入数据。

在创建和配置调度器时,可以使用JobDataMap来传递参数给作业。有两种方式可以从执行方法的上下文中取出参数:一种是直接从execute方法的上下文中取出,另一种是在作业类中定义参数名称,并完成相应的get和set方法。

任务详情类和触发器类都可以在创建实例的时候设置JobDataMap

方式一

通过其中的usingDataJob()方法设置值,通过JobExecutionContext全局变量获取值

package schedule;import job.MyJob;
import org.quartz.*;
import org.quartz.impl.StdSchedulerFactory;public class MySchedule1 {public static void main(String[] args) {// 创建作业详情JobDetail jobDetail = JobBuilder.newJob(MyJob.class)//作业的类名.withIdentity("myJob", "group1")//作业的身份标识(名称和组名).usingJobData("jobDetail","jobDetail").build();//创建触发器Trigger trigger = TriggerBuilder.newTrigger().withIdentity("myTrigger", "group1")//触发器的身份标识(名称和组名).usingJobData("trigger","trigger").withSchedule(SimpleScheduleBuilder.simpleSchedule()//设置触发器的调度计划.withIntervalInSeconds(3)//设置作业执行的间隔时间为3秒。.repeatForever())//指定触发器应该无限次地重复执行作业。.build();try {// 创建调度器实例Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();// 将作业和触发器注册到调度器scheduler.scheduleJob(jobDetail, trigger);// 开始调度scheduler.start();} catch (SchedulerException se) {se.printStackTrace();}}
}
package job;import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.quartz.JobKey;public class MyJob implements Job {@Overridepublic void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {//获取jobDetail中的JobDataString jobDetail = jobExecutionContext.getJobDetail().getJobDataMap().getString("jobDetail");//获取trigger中的JobDataString trigger = jobExecutionContext.getTrigger().getJobDataMap().getString("trigger");System.out.println(jobDetail);System.out.println(trigger);}
}

方式二

通过Job子类的set方法将属性赋值,在添加jobdata时将key值设为set方法中设置的属性名

实例

关键修改部分代码

package job;import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;public class MyJob1 implements Job {private String jobDetail;private String trigger;public void setJobDetail(String jobDetail) {this.jobDetail = jobDetail;}public void setTrigger(String trigger) {this.trigger = trigger;}@Overridepublic void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {//        //获取jobDetail中的JobData
//        String jobDetail = jobExecutionContext.getJobDetail().getJobDataMap().getString("jobDetail");
//        //获取trigger中的JobData
//        String trigger = jobExecutionContext.getTrigger().getJobDataMap().getString("trigger");System.out.println(jobDetail);System.out.println(trigger);}
}
注意事项

当任务详细类中的JobDataMap设置的key和调度器类设置的key一样的话,后者会覆盖前者的值。

关键部分修改:

结果

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/688908.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

IPv4编址方式

IPv4编址方式 本文的知识都可以到B站up湖科大教书匠的视频里去看具体讲解。 分类地址 IPv4地址被分为网络号和主机号,可分为A类地址、B类地址、C类地址、D类地址、E类地址。其中,只有A类、B类、C类地址的可用于给网络中的主机编址。 A类地址的网络号…

【Jvm】性能调优(下)线上问题排查思路汇总

文章目录 前言性能调优(上)线上问题排查工具汇总JVM调优(中)Java中不得不了解的OOM Error 一.JVM参数1.参数分类2.非稳定参数(-XX)说明3.查询JVM默认参数及运行时生效参数4.常用参数5.GC日志相关参数6.发生…

嵌入式系统在智慧城市建设中的关键角色与挑战

(本文为简单介绍,观点源于网络) 智慧城市的概念,随着信息技术的日益发展而不断深化。它利用各种信息传感器,通过物联网、云计算、大数据等技术手段,实现城市管理的智能化、精细化。在这一过程中&#xff0…

jvm、jre、jdk的关系

jvm Java 虚拟机(JVM)是运行 Java 字节码的虚拟机。 jre JRE(Java Runtime Environment) 是 Java 运行时环境。它是运行已编译 Java 程序所需的所有内容的集合,主要包括 Java 虚拟机(JVM)、J…

沁恒CH32V30X学习笔记06---串口dma接收+空闲中断组合接收数据

DMA 控制器提供 18 个通道,其中 DMA1 包含 7 个通道,DMA2 包含 11 个通道,每个通 道对应多个外设请求,通过设置相应外设寄存器中对应 DMA 控制位 通道映射 dma1 dma2 示例代码 bsp_usart_it.c /** bsp_usart_it.c** Created on: 2024年2月18日* Author: admin*/…

SPSSAU【文本分析】|LDA主题分析

LDA主题分析 LDA主题分析是一种提取出文本数据核心主题的模型,其可将整份数据文档的信息提取成几个主题,并且标题出主题与关键词之间的权重情况,用于识别主题的具体实际意义,除此之外,LDA主题分析涉及到可视化展示和图…

PyCharm 自动添加文件头注释

PyCharm 自动添加文件头注释 1. File and Code Templates2. Python FileReferences 1. File and Code Templates File -> Settings -> Editor -> File and Code Templates -> Python Script Reformat according to style & Enable Live Templates Created by…

stm32--笔记

一、引脚与变量 ​​​​​​​​​​​​​​ 二、STM32时钟 [STM32-时钟系统详解_stm32时钟_KevinFlyn的博客-CSDN博客] 三、定时器中断实验 1、定时器中断实验 ​ stm32关于通用定时器的周期、频率计算公式_stm32tim频率计算_胶囊咖啡的博客-CSDN博客 ​ 【STM32】通用…

2024.2.18 C++QT 作业

思维导图 练习题 1>定义一个基类 Animal&#xff0c;其中有一个虛函数perform&#xff08;)&#xff0c;用于在子类中实现不同的表演行为。 #include <iostream>using namespace std;class Animal { public:virtual void perform() {cout << "这是一个动…

pytest 框架自动化测试

随笔记录 目录 1. 安装 2. 安装pytest 相关插件 2.1 准备阶段 2.2 安装 2.3 验证安装成功 3. pytest测试用例的运行方式 3.1 主函数模式 3.1.1 主函数执行指定文件 3.1.2 主函数执行指定模块 3.1.3 主函数执行某个文件中的某个类、方法、函数 3.1.4 主函数执行生…

Deployment

一、Deployment&#xff1a;管理部署发布的控制器 1、背景问题&#xff1a; 应用中的 Pod 如果出现了一些故障&#xff0c;如何保证集群内可用 Pod 的数量&#xff1f; 如何为所有 Pod 更新镜像版本&#xff1f; 在更新过程中&#xff0c;如何保证服务的可用性&#xff1f;…

PyCharm 调试过程中控制台 (Console) 窗口内运行命令 - 实时获取中间状态

PyCharm 调试过程中控制台 [Console] 窗口内运行命令 - 实时获取中间状态 1. yongqiang.py2. Debugger -> Console3. Show Python PromptReferences 1. yongqiang.py #!/usr/bin/env python # -*- coding: utf-8 -*- # yongqiang chengfrom __future__ import absolute_imp…

MyBatis框架-动态SQL

动态SQL 什么是动态SQL&#xff1a;动态SQL指的是根据不同的查询条件 , 生成不同的Sql语句. 动态 SQL 是 MyBatis 的强大特性之一。如果你使用过 JDBC 或其它类似的框架&#xff0c;你应该能理解根据不同条件拼接 SQL 语句有多痛苦&#xff0c;例如拼接时要确保不能忘记添加必…

Axios学习

文章目录 Axios1.Json-server的搭建2.Axios的基本使用3.Axios的其他使用4.Axios响应结果的结构分析5.Axios配置对象详细说明6.axios的默认配置7.axios创建实例对象&#xff08;create&#xff09;8.axios拦截器1.请求拦截器2.响应拦截器 9.取消请求10.源码分析 Axios 1.Json-s…

小迪安全25WEB 攻防-通用漏洞SQL 读写注入MYSQLMSSQLPostgreSQL

#知识点&#xff1a; 1、SQL 注入-MYSQL 数据库 2、SQL 注入-MSSQL(SQL server) 数据库 3、SQL 注入-PostgreSQL 数据库 #详细点&#xff1a; Access 无高权限注入点-只能猜解&#xff0c;还是暴力猜解 因为access的数据库是独立存在的&#xff0c;不存在统一管理 …

GitLab安装配置

一、GitLab的简介 GitLab是开源的代码托管平台&#xff0c;提供版本控制功能、代码审查、持续集成等工具&#xff0c;帮助团队协作开发软件项目。用户可以创建仓库存储代码&#xff0c;管理问题追踪&#xff0c;部署自动化流程等。 二、GitLab的安装 1、Rocky_Linux 下载安装 …

应用回归分析:多重共线性

多重共线性的概念 在回归分析中&#xff0c;我们通常关注的是如何利用一个或多个自变量&#xff08;解释变量&#xff09;来预测一个因变量&#xff08;响应变量&#xff09;。当我们使用多元线性回归模型时&#xff0c;理想的情况是模型中的每一个自变量都能提供独特的、对因…

【嵌入式学习】C++QT-Day6-C++基础

作业&#xff1a; 1.思维导图 见我的博客&#xff1a;https://lingjun.life/wiki/EmbeddedNote/19Cpp 2.编程题&#xff1a; 以下是一个简单的比喻&#xff0c;将多态概念与生活中的实际情况相联系&#xff1a; 比喻&#xff1a;动物园的讲解员和动物表演 想象一下你去了…

2024 前端面试题(GPT回答 + 示例代码 + 解释)No.114 - No.121

本文题目来源于全网收集&#xff0c;答案来源于 ChatGPT 和 博主&#xff08;的小部分……&#xff09; 格式&#xff1a;题目 h3 回答 text 参考大佬博客补充 text 示例代码 code 解释 quote 补充 quote 上一篇链接&#xff1a;2024 前端面试题&#xff08;GPT回答 示例…

汽车网络安全--关于供应商网络安全能力维度的思考

目录 1.关于CSMS的理解 2.OEM如何评审供应商 2.1 质量评审 2.2 网络安全能力评审 3.小结 1.关于CSMS的理解 最近在和朋友们交流汽车网络安全趋势时&#xff0c;讨论最多的是供应商如何向OEM证明其网络安全能力。 这是很重要的一环&#xff0c;因为随着汽车网络安全相关强…