`
eksliang
  • 浏览: 598852 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Quartz——Calendar详解

阅读更多

转载请出自出处: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将得到更新

 

  • 大小: 43.8 KB
分享到:
评论
1 楼 qwfys200 2015-06-01  
总结的很全面。

相关推荐

    Quartz——作业调度框架

    NULL 博文链接:https://zhangyumeng.iteye.com/blog/286528

    Quartz定时任务详解

    Quartz定时任务详解 Quartz 是一个功能齐全的开源作业调度系统,可以用于从最小的应用程序到大型企业系统。Quartz 非常灵活,包含多个可以单独或一起使用的使用范例,以实现您想要的行为,并使您能够以对您的项目最...

    Quartz之CronExpression详解

    ### Quartz之CronExpression详解 #### 一、CronExpression概述 CronExpression是一种用于配置Quartz调度器中定时任务的表达式格式。通过这种格式化的字符串,用户能够灵活地定义任务执行的时间规律。...

    Quartz 固定时间间隔计划+Calendar和Cron

    标题中的 "固定时间间隔计划" 指的是使用 Quartz 的 SimpleTrigger 类来设置间隔时间执行任务的方式,而 "Calendar 和 Cron" 提到了另外两种时间触发器,它们提供了更复杂的调度策略。 1. **SimpleTrigger**: ...

    Quartz Spring整合——附带webservice Demo

    在"Quartz Spring整合——附带webservice Demo"的项目中,我们可以看到如何将这两个强大的工具结合在一起。这个Demo可能包含了一个使用Quartz调度器来触发Web服务调用的示例。Web服务(Webservice)是一种基于标准的...

    spring整合Quartz框架过程详解

    Spring 整合 Quartz 框架过程详解 本文主要介绍了 Spring 整合 Quartz 框架的过程详解,通过示例代码对大家的学习或者工作具有参考学习价值。 一、Quartz 框架简介 Quartz 是一个完全由 Java 编写的开源任务调度...

    Quartz使用详解

    Quartz 使用详解 Quartz 是一个功能强大的作业调度器,可以帮助开发者实现复杂的任务调度和执行。下面是关于 Quartz 使用详解的知识点总结。 一、实例化 Scheduler 在使用 Quartz 之前, 必须使用 ...

    完整quartz配置大全

    OpenSymphony 的Quartz提供了一个比较完美的任务调度解决方案。  Quartz 是个开源的作业调度框架,为在 Java 应用程序中进行作业调度提供了简单却强大的机制。  Quartz中有两个基本概念:作业和触发器。作业是...

    定时任务quartz及教程

    Quartz是Java领域中广泛应用的一款开源的作业调度框架,它允许开发者在应用程序中安排复杂的定时任务。本教程将深入探讨Quartz的核心概念、配置、API使用以及如何在实际项目中集成和管理定时任务。 一、Quartz核心...

    IOS应用源码——QuartzDemo.rar

    QuartzDemo是一个针对iOS平台的源码示例项目,它主要展示了如何使用Quartz 2D图形编程接口来创建自定义的视觉效果和图形。Quartz 2D是Apple为iOS和Mac OS X提供的一种核心图形库,允许开发者在应用程序中绘制2D图形...

    quartz的项目源码——用于和文章配套学习

    - **Calendar**: 可选地,你可以使用日历来排除某些日期或时间,避免Job在特定时刻运行。 2. **Quartz的配置** - 配置Quartz可以通过XML、Java代码或者Spring框架。XML配置文件(`quartz.properties`)通常用于...

    Spring Boot 配置 Quartz 定时任务(csdn)————程序.pdf

    Spring Boot 配置 Quartz 定时任务(csdn)————程序

    Spring.NET学习笔记25——整合Quartz.NET例子

    刘冬编写Spring.NET学习笔记25——整合Quartz.NET例子。 原文: http://www.cnblogs.com/GoodHelper/archive/2009/11/20/SpringNet_QuartzNet.html

    iOS Quartz2D详解 - imlifengfeng1

    首先,我们来了解下Quartz2D的基础——图形上下文(Graphics Context)。图形上下文是一个CGContextRef类型的对象,它负责存储绘图信息和状态,同时也确定了绘制的目标位置,可以是屏幕、PDF文件、位图或者打印机等...

    Quartz.NET 配置文件详解1

    Quartz.NET 是一个开源的作业调度框架,用于在 .NET 应用程序中实现任务的自动化执行。它允许开发者定义任务(Job)和触发器(Trigger),并根据预设的时间表自动执行这些任务。本文将深入解析 Quartz.NET 的配置...

    Quartz Scheduler详解

    Quartz可以集成到几乎所有的Java应用程序——从简单的独立应用程序到大型电子商务系统。它提供了广泛的作业调度特性,包括支持J2SE和J2EE环境,支持集群,以及支持多种不同类型的作业执行机制。 **Quartz调度器的...

    java quartz详解

    ### Java Quartz 详解 #### 一、Quartz 概述 Quartz 是一款开源的作业调度框架,可以用来实现各种定时任务的需求。它提供了一种简单的方式来定义触发器(Trigger),用于设定作业(Job)何时运行。Quartz 的灵活性...

Global site tag (gtag.js) - Google Analytics