quartz 中JobExecutionContext的使用

假如execute方法中需要一些额外的数据怎么办?比如说execute

中希望发送一封邮件,但是我需要知道邮件的发送者、接收者等信息?

存在两种解决方案:

1.JobDataMap类:

每个JobDetail都关联了一个JobDataMap实例,JobDataMap是java.util.Map的子类,基本上是提供key- value形式的数据,并提供了一些便利方法(主要是对java基本数据类型的支持,如put(String key,int value)),当开发人员创建JobDetail的时候,可以把附加信息放到JobDataMap中,那么在execute方法中可以根据key找到需 要的值。

JobDetail job = new JobDetail....

job.getJobDataMap().put("from","snowway@vip.sina.com");

...

在execute中

String from = jobExecutionContext.getJobDetail().getJobDataMap().getString("from");

....

不过,当你使用数据库存储JobDetail的时候(默认情况下使用RAM),这里有一个致命的弱点,你不能把没有实现 java.io.Serializable的对象放入JobDataMap中,因为Quartz将使用Blob字段保存(也可以通过配置文件关闭)序列化 过的JobDataMap中的对象。比如你在execute方法中需要一个java.sql.Connection接口实例,这种情况也是普遍的,那么通 常情况下你不能把Connection放入JobDataMap,即使你只想在execute中使用。(注:读者可暂时认为上面这段话是正确的,然而可以 通过指示quartz改变这种行为,那属于高级话题)

2.假如你需要一个java.sql.Connection,用于在execute中完成某些操作,那么你可以把Connection放入Quartz的 SchedulerContext中,execute也可以访问,并且Quartz不会持久化SchedulerContext中的任何东西。

scheduler.getContext().put("java.sql.Connection",connection);

execute中

Connection con = (Connection)jobExecutionContext.getScheduler().getContext().get("java.sql.Connection");

相关推荐
身如柳絮随风扬几秒前
Java JDBC 从入门到进阶
java·开发语言
AC赳赳老秦几秒前
OpenClaw SEO写手Agent实操:生成结构化文章,适配CSDN搜索规则
大数据·人工智能·python·搜索引擎·去中心化·deepseek·openclaw
nbsaas-boot4 分钟前
AI编程的现实困境与未来路径:从“可用”到“可靠”的跃迁
java·运维·开发语言·架构
廖圣平9 分钟前
从零开始,福袋直播间脚本研究【八】《策略模式》
开发语言·python·bash·策略模式
2301_8042154112 分钟前
Python类型提示(Type Hints)详解
jvm·数据库·python
灰子学技术16 分钟前
C++ 代码质量检测工具集合技术文档
开发语言·c++
第一程序员21 分钟前
非专业转码心路历程与Rust学习规划
python·github
一帧一画22 分钟前
基于 CNN+LSTM 的全国年度降水预测实践
python·cnn·lstm
散峰而望22 分钟前
【数据结构】单调栈与单调队列深度解析:从模板到实战,一网打尽
开发语言·数据结构·c++·后端·算法·github·推荐算法
骄阳似火_201822 分钟前
Anaconda的详细安装步骤
python