假如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");

最新文章

  1. MEF入门之不求甚解,但力求简单能讲明白(二)
  2. 关于jQuery里面的选择器
  3. ctags+cscope
  4. Android笔记——Windows环境下Android Studio v1.0安装教程
  5. UltraEdit常用配置&搭建Java/C开发环境
  6. MySQL 5.7 深度解析: 临时表空间
  7. 【linux】iptables 开启80端口
  8. Codeforces Gym 100418B 暴力
  9. What and where are the stack and heap?
  10. c语言构建动态数组
  11. C# XML与Json之间相互转换
  12. SilkTest高级进阶系列7-用PostMessage模拟鼠标
  13. python test0729.py
  14. 第二篇:使用Spark对MovieLens的特征进行提取
  15. #WEB安全基础 : HTML/CSS | 文章索引
  16. mysql数据库的基本操作:创建数据库、查看数据库、修改数据库、删除数据库
  17. 高仿Readhub小程序 微信小程序项目【原】
  18. CSS之padding&margin
  19. Luogu4886 快递员 点分治
  20. c#为字段设置默认值,以及构造函数初始化List对象。

热门文章

  1. Java小实验之数据转换
  2. 《精通Python设计模式》学习结构型之享元模式
  3. Asp.net Vnext 实现IView
  4. Java第三阶段学习(一、IO流------File类)
  5. OpenCV持久化(二)
  6. 【BZOJ】3674: 可持久化并查集加强版
  7. Bootstrap进阶三:jQuery插件概览
  8. APP的UI自动化测试框架及平台化探索
  9. NetCore+Dapper WebApi架构搭建(六):添加JWT认证
  10. 深入理解ajax系列第九篇