当前位置: 代码迷 >> 综合 >> quartz使用(三)其他
  详细解决方案

quartz使用(三)其他

热度:78   发布时间:2023-09-29 07:26:41.0

参数专递

定义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:日期任务触发器,可以制定一个日期,任务将在指定的日期执行。

  相关解决方案