zoukankan      html  css  js  c++  java
  • 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");

  • 相关阅读:
    Unable to lock the administration directory (/var/lib/dpkg/)解决办法
    Linux实训——搭建动态网站
    Linux实训——搭建HTTP服务器
    小程序学习视频教程
    数组的所有方法
    小程序组件封装步骤
    微信小程序生成图片学习
    小程序组件封装学习地址
    开发者在 onPageNotFound 回调中进行重定向处理onPageNotFound(Object)
    小程序中view的自定义属性获取
  • 原文地址:https://www.cnblogs.com/interdrp/p/3511302.html
Copyright © 2011-2022 走看看