文档章节

Quartz——Calendar详解

闪电
 闪电
发布于 2015/05/09 23:23
字数 625
阅读 51
收藏 0

转载请出自出处:http://eksliang.iteye.com/blog/2208333

一.概述

在实际任务调度中,我们不可能一成不变地按照某个周期性的调度规则运行任务,必须考虑到实现生活中日历上特定日期,就像习惯了大男人作风的人在2月14号也会有不同表现一样。

 

二.Quartz的Calendar介绍

1)Quartz的Calendar层次结构


 在本例中主要用到了AnnualCalendar,它的作用是排除排除每一年中指定的一天或多天. 

 
2)其它相应的Calendar的含义如下
  1. CronCalendar:使用表达式排除某些时间段不执行
  2. DailyCalendar:指定的时间范围内的每一天不执行
  3. HolidayCalendar:排除节假日
  4. MonthlyCalendar:排除月份中的数天
  5. WeeklyCalendar:排除星期中的一天或多天

三.参考实例

简单的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());
	}

}

 

使用simpleTrigger对SimpleJob进行调度,让它每2秒钟运行一次,并将五一劳动节和万圣节排除在外,代码如下:

package com.ickes.job;

import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerFactory;
import org.quartz.SimpleTrigger;
import org.quartz.impl.StdSchedulerFactory;
import org.quartz.impl.calendar.AnnualCalendar;

/**
 * @author Ickes
 */
public class CalendarDemo {
	public static void main(String[] args) throws Exception {
		//第一步:创建一个JobDetail实例
		JobDetail jobDetail = new JobDetail("j_job1","j_group1", SimpleJob.class);
		
		//第二步:通过SimpleTrigger触发器定义调度规则:马上启动,每2秒运行一次,共运行无数次 
		SimpleTrigger simpleTrigger = new SimpleTrigger("t_job1","t_group_1");  
	    simpleTrigger.setStartTime(new Date());//开始运行时间  
	    simpleTrigger.setRepeatInterval(2000); //运行间隔单位为毫秒  
	    simpleTrigger.setRepeatCount(-1);      //运行次数  

	    //第三步:创建Quartz的Calendar,法定节日是以每年为周期的,所以使用AnnualCalendar
		AnnualCalendar holidays = new AnnualCalendar();
		//五一劳动节
		Calendar laborDay = new GregorianCalendar(2015, 4, 1);
		holidays.setDayExcluded(laborDay, true);//排除的日期,如果设置为false则为包含
		//万圣节(31号)
		Calendar halloween = new GregorianCalendar(2005, 9, 31);
		holidays.setDayExcluded(halloween, true);//排除该日期
		
		//第四步:通过SchedulerFactory获取一个调度器实例
		SchedulerFactory schedulerFactory = new StdSchedulerFactory();
		Scheduler scheduler = schedulerFactory.getScheduler();
		
		//第五步:向Scheduler注册日历
		scheduler.addCalendar("holidays", holidays, false, false);
		
		//第六步:让Trigger应用指定的日历规则
		simpleTrigger.setCalendarName("holidays");
		
		//第七步:将job跟trigger注册到scheduler中进行调度
		scheduler.scheduleJob(jobDetail, simpleTrigger);
		
		//第八步:调度启动
		scheduler.start();	
	}
}

 第五步:向Scheduler注册日历Scheduler.addCalendar(String calName, Calendar calendar, boolean replace, boolean updateTriggers)如果updateTriggers为true,Scheduler中已引用Calendar的Trigger将得到更新

 

本文转载自:http://eksliang.iteye.com/blog/2208333

闪电
粉丝 74
博文 392
码字总数 6789
作品 0
海淀
技术主管
私信 提问
Spring任务调度之Quartz集成

推荐一个博客:http://blog.csdn.net/column/details/14251.html 基本概念 Job:是一个接口,只有一个方法void execute(JobExecutionContext context),开发者实现该接口定义运行任务,JobEx...

宇的季节
2017/12/17
0
0
Quartz 开源任务调度框架

Job JobDetail Tirgger Scheduler 将jobDetail 和tirgger对应进行调度 一个Job可以对应多个Trigger,但一个Trigger只能对应一个Job。可以通过SchedulerFactory创建一个Scheduler实例。Sched...

小墨雨
2016/11/22
31
0
了解Quartz体系结构

了解Quartz体系结构 Quartz对任务调度的领域问题进行了高度的抽象,提出了调度器、任务和触发器这3个核心的概念,并在org.quartz通过接口和类对重要的这些核心概念进行描述: ●Job:是一个接...

李永china
2016/11/04
15
0
几种任务调度的 Java 实现方法与比较1——阅读

综观目前的 Web 应用,多数应用都具备任务调度的功能。本文由浅入深介绍了几种任务调度的 Java 实现方法,包括 Timer,Scheduler, Quartz 以及 JCron Tab,并对其优缺点进行比较,目的在于给...

关河
2016/01/29
18
0
Spring Cloud 2.x系列之springboot集成quartz

java设计模式之观察者模式 一大波视频分享 Mysql代理中间件Atlas安装和配置 在做项目时有时候会有定时器任务的功能,比如某某时间应该做什么,多少秒应该怎么样之类的。定时任务常用的业务场...

技术小能手
2018/10/15
0
0

没有更多内容

加载失败,请刷新页面

加载更多

对话亲历者|鲁肃:我在支付宝“拧螺丝“的日子

摘要: 他是支付宝技术平台的奠基人之一,但是他总说“这还不是我心中最完美的架构”;他行事低调但却有着“此时此地,非我莫属”的豪气;他曾无数次充当救火大队长,但自评只是“没有掉队的...

阿里云云栖社区
4分钟前
0
0
设置 npm yarn 淘宝源

设置npm config set chromedriver_cdnurl=http://cdn.npm.taobao.org/dist/chromedriver设置yarn config set "chromedriver_cdnurl" "https://npm.taobao.org/mirrors/chromedriver"......

internetafei
13分钟前
0
0
Docker搭建Mysql集群、主从同步复制

1、创建数据挂载点: mkdir /opt/mysql-master/mysql、/opt/mysql-master/conf.d、/opt/mysql-slave/conf.d、/opt/mysql-slave/conf.d 2、分别在master、slave节点文件目录conf.d下创建touch......

WALK_MAN
36分钟前
8
0
手把手教你做中间件开发(分布式缓存篇)-借助redis已有的网络相关.c和.h文件,半小时快速实现一个epoll异步网络框架,程序demo

本文档配合主要对如下demo进行配合说明: 借助redis已有的网络相关.c和.h文件,半小时快速实现一个epoll异步网络框架,程序demo 0. 手把手教你做中间件、高性能服务器、分布式存储技术交流群 ...

y123456yz
37分钟前
2
0
Spring-boot单元测试(私有方法测试)

Spring-boot的单元测试网上有了很多,当项目是可以使用spring-boot正常运行时,只要在测试类上添加如下配置就使用@Autowired的方式进行单元测试 @RunWith(SpringJUnit4ClassRunner.class)@...

琴兽
58分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部