参数专递
定义JobDetail时使用 JobDetail的方法可以进行参数设置
JobDetail.getJobDataMap().put("key","value");
JobDetail.getJobDataMap().put("key1","value1");
执行时们可以根据JobDetail的方法context.getJobDetail().getJobDataMap() 获取参数的map
@Overridepublic void execute(JobExecutionContext context) throws JobExecutionException {System.out.println("QuartzJob1--" + new Date() + "---实现业务逻辑----" + times++ + "------");Map<String,Object> value = context.getJobDetail().getJobDataMap();for(Map.Entry<String, Object> entry : value.entrySet()) {System.out.println("QuartzJob1----参数key=" + entry.getKey() + " value =" + entry.getValue());}}
监听器SchedulerListener
监听器是对任务的启动暂停等操作的监听。我们需要自定义实现类实现SchedulerListener接口并实现其中的需要的方法。主要方法介绍如下:
| 方法 | 说明 |
|---|---|
| jobScheduled() | Scheduler 在有新的 JobDetail 部署时调用此方法。 |
| jobUnscheduled() | Scheduler 在有新的 JobDetail卸载时调用此方法 |
| triggerFinalized() | 当一个 Trigger 来到了再也不会触发的状态时调用这个方法。除非这个 Job 已设置成了持久性,否则它就会从 Scheduler 中移除。 |
| triggersPaused() | Scheduler 在一个 Trigger 或 Trigger 组被暂停时调用这个方法。假如是 Trigger 组的话,triggerName 参数将为 null。 |
| triggersResumed() | Scheduler 在一个 Trigger 或 Trigger 组从暂停中恢复时调用这个方法。假如是 Trigger 组的话,triggerName 参数将为 null。 |
| jobsPaused() | 当一个或一组 JobDetail 暂停时调用这个方法。 |
| jobsResumed() | 当一个或一组 Job 从暂停上恢复时调用这个方法。假如是一个 Job 组,jobName 参数将为 null。 |
| schedulerError() | Scheduler 的正常运行期间产生一个严重错误时调用这个方法。错误的类型会各式的,错误例子:初始化 Job 类的问题,试图去找到下一 Trigger 的问题,JobStore 中重复的问题,数据存储连接的问题。程序中可以使用 SchedulerException 的 getErrorCode() 或者 getUnderlyingException() 方法或获取到特定错误的更详尽的信息。 |
| schedulerShutdown() | 当 SchedulerListener Scheduler 将要被关闭时, Scheduler 调用会这个方法。 |
设置方法是:
//获取一个默认的Scheduler对象private static Scheduler getScheduler() {try {Scheduler scheduler = schedulerFactory.getScheduler();//定义监听器scheduler.getListenerManager().addSchedulerListener(new MySchedulerListener());return scheduler;} catch (SchedulerException e) {e.printStackTrace();}return null;}
定时任务种类-ScheduleBuilder
通过 TriggerBuilder的withSchedule方法可以知道定义定时器的是ScheduleBuilder。
public <SBT extends T> TriggerBuilder<SBT> withSchedule(ScheduleBuilder<SBT> schedBuilder)
通过接口ScheduleBuilder可以查到在quartz中有四种实现:
SimpleScheduleBuilder:简单的任务定时器,可以定义按照指定时间间隔执行任务,可以定义在指定的时间内执行次数。
DailyTimeIntervalScheduleBuilder:每日时间间隔触发器,可以定义每天中任务的执行周期,时间间隔;每天的开始执行时间和结束执行时间;每个星期中哪些填需要执行任务。
CronScheduleBuilder:corn表达式的任务触发器。
CalendarIntervalScheduleBuilder:日期任务触发器,可以制定一个日期,任务将在指定的日期执行。