JobExecutionContext:它是位于Job接口的execute方法的参数位置。由于每个业务逻辑Job实例需要的参数不同,Quartz没办法提供带有参数的构造函数。去给Job实例初始化参数。因此Quartz在每次执行Job时,都需要重新创建一个Job实例。并通过newInstance的反射机制调用无参构造函数,依据Job实现类的描述来实例化Job。所以想进行传参就需要使用JobExecutionContext。(类似于Servlet访问ServletContext那样)通过JobExecutionContext,Job可以访问到所处环境的所有信息(包括注射到Scheduler上与该Job相关的JobDetail和Trigger)。
JobDataMap:它支持键值对的形式,将自定义参数传入JobDataMap。
获取JobDataMap:
举例:如图。
知识点1:通过在创建JobDetail或者Trigger时,通过usingJobData(参数1,参数2)为JobExecuteContext参数传入参数,如果传入多个参数,可以通过定义多个usingJobData方法。
知识点2:可以通过JobKey或者TriggerKey实例的getName或者getGroup方法获取JobDetail或者Trigger的唯一标识和组。而JobKey或者TriggerKey是通过JobExecuteContext参数的getJobDetail.getKey()或者getTriiger().getKey()方法获取的。
知识点3:可以通过JobDataMap获取传入的参数,也就是通过传入的key获取value,而JobDataMap是通过JobExecuteContext实例的getJobDetail.getJobDataMap或者getTrigger.getJobDataMap获取的。之后就可以通过JobDataMap实例的getKey("key")获取值。
定时任务工具所需
调度器scheduler 老板
触发器trigger 下班
任务jobDetail 发工资
总结:下班老板发工资
JobDataMap
打印输出job trigger信息
2-3、浅谈JobExecutionContext:
一、JobExecutionContext是什么:
1、当Scheduler调用一个Job,就会将JobExecutionContext传递给Job的execute();
2、Job能通过JobExecutionContext对象访问到Quartz运行时的环境和Job本身的明细数据。
二、JobDataMap是什么:
1、在进行任务调度时JobDataMap存储在JobExecutionContext中非常方便获取。
2、JobDataMap可以用来装载任何可序列化的数据对象,当job实例对象被执行时这些参数对象会传递给它。
3、JobDataMap实现了JDK的Map接口,并且添加了一些非常方便的方法用来存储基本数据类型。
三、获取JobDataMap的两种方式:
1、从Map中直接获取;
2、在Job实现类中添加setter方法对应对应JobDataMap的键值(Quartz框架默认的JobFactory实现类在初始化job实例对象时会自动的调用这些setter方法);
在Job类通过Context获取JobDataMap数据等
JobExecutionContext
JobDataMap浅谈
通过 JobDataMap 来获取信息
JobDataMap 的说明
JobDataMap