博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Quartz——DateIntervalTrigger触发器
阅读量:7172 次
发布时间:2019-06-29

本文共 2200 字,大约阅读时间需要 7 分钟。

  hot3.png

转载请出自出处:

一.概述

simpleTrigger 内部实现机制是通过计算间隔时间来计算下次的执行时间,这就导致他有不适合调度的定时任务。例如我们想每天的 1:00AM 执行任务,如果使用 SimpleTrigger,间隔时间就是一天。注意这里就会有一个问题,即当有 misfired 的任务并且恢复执行时,该执行时间是随机的(取决于何时执行 misfired 的任务,例如某天的 3:00PM)。这会导致之后每天的执行时间都会变成 3:00PM,而不是我们原来期望的 1:00AM。

那应该怎么解决?

答:使用DateIntervalTrigger触发器

DateIntervalTrigger 是 Quartz 1.7 之后的版本加入的,其最适合调度类似每 N(1, 2, 3...)小时,每 N 天,每 N 周等的任务。虽然 SimpleTrigger 也能实现类似的任务,但是 DateIntervalTrigger 不会受到我们上面说到的 misfired 任务的影响。另外,DateIntervalTrigger 也不会受到 DST(Daylight Saving Time, 即中国的夏令时)调整的影响。笔者就曾经因为该原因将项目中的 SimpleTrigger 改为了 DateIntervalTrigger,因为如果使用 SimpleTrigger,本来设定的调度时间就会由于 DST 的调整而提前或延迟一个小时,而 DateIntervalTrigger 不会受此影响。

 

二.参考实例

简单的Job实现类:打印任务详情

 

package com.ickes.job;import org.quartz.Job;import org.quartz.JobExecutionContext;import org.quartz.JobExecutionException;/** * 实现Job接口,定义运行的任务 * @author Ickes */public class SimpleJob implements Job {	public void execute(JobExecutionContext context)			throws JobExecutionException {		//打印任务详情		System.out.println(				context.getJobDetail().getGroup() 				+"——"+context.getJobDetail().getName()				+"——"+context.getTrigger().getName()				+"——"+context.getTrigger().getGroup());	}}

 

DateIntervalTriggerDemo测试实例

 

package com.ickes.job;import org.quartz.DateIntervalTrigger;import org.quartz.JobDetail;import org.quartz.Scheduler;import org.quartz.SchedulerFactory;import org.quartz.impl.StdSchedulerFactory;/** * @author Ickes */public class DateIntervalTriggerDemo {	public static void main(String[] args) throws Exception {		//第一步:创建一个JobDetail实例		JobDetail jobDetail = new JobDetail("j_job1","j_group1", SimpleJob.class);		//第二步:通过DateIntervalTrigger触发器定义调度规则:每隔1秒钟调度一次		/*		 * 第三个参数:DateIntervalTrigger.IntervalUnit.SECOND 这是间隔单位		 * 第四个参数:每多少次第三个参数单位触发一次job		 * 例如:下面就是每隔一秒触发一次		 */		DateIntervalTrigger trigger = new DateIntervalTrigger("t_trigger1","t_group1",				DateIntervalTrigger.IntervalUnit.SECOND, 1);		//第三步:通过SchedulerFactory获取一个调度器实例		SchedulerFactory schedulerFactory = new StdSchedulerFactory();		Scheduler scheduler = schedulerFactory.getScheduler();		//第四步:将job跟trigger注册到scheduler中进行调度		scheduler.scheduleJob(jobDetail, trigger);		//第五步:调度启动		scheduler.start();	}}

 

 

转载于:https://my.oschina.net/boltwu/blog/412850

你可能感兴趣的文章
Mysql四种常见数据库引擎
查看>>
《Kotin 极简教程》第7章 面向对象编程(OOP)(1)
查看>>
Chrome吃内存的能力可不是说着玩的!
查看>>
使用paho的MQTT时遇到的重连导致订阅无法收到问题和解决
查看>>
Java多线程进一步的理解之------------缓存机制
查看>>
Appium-处理系统弹窗
查看>>
pwn练习-r0pbaby
查看>>
IntelliJ IDEA 详细图解最常用的配置 ,适合刚刚用的新人
查看>>
[20180619]fsc表示什么.txt
查看>>
域名对SEO的影响大吗?
查看>>
7年苦心钻研自动驾驶,最终Alphabet选择削减投入
查看>>
农民伯伯的福利到了,AR技术让种地更加easy
查看>>
4年后,nuTonomy要在10城市运行无人驾驶车
查看>>
李开复预言:人工智能将在10年后让50%的人失业
查看>>
iStaing获500万美元投资,VR室内设计离我们还远吗?
查看>>
EventBus与RxJava
查看>>
JFinal结合Sigar、echarts实现后台服务器监控
查看>>
SAP Netweaver和Hybris的数据库层
查看>>
编写安全 PHP 应用程序的七个习惯
查看>>
Elasticsearch 公司上市,市值近 50 亿美元
查看>>