转载请出自出处:http://eksliang.iteye.com/blog/2208333
一.概述
在实际任务调度中,我们不可能一成不变地按照某个周期性的调度规则运行任务,必须考虑到实现生活中日历上特定日期,就像习惯了大男人作风的人在2月14号也会有不同表现一样。
二.Quartz的Calendar介绍
1)Quartz的Calendar层次结构
在本例中主要用到了AnnualCalendar,它的作用是排除排除每一年中指定的一天或多天.
2)其它相应的Calendar的含义如下
- CronCalendar:使用表达式排除某些时间段不执行
- DailyCalendar:指定的时间范围内的每一天不执行
- HolidayCalendar:排除节假日
- MonthlyCalendar:排除月份中的数天
- 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将得到更新
相关推荐
NULL 博文链接:https://zhangyumeng.iteye.com/blog/286528
Quartz定时任务详解
Quartz使用详解 Quartz使用详解 Quartz使用详解 Quartz使用详解 Quartz使用详解 Quartz使用详解
详细介绍CronExpression表达式设定定时任务的规则
IOS应用源码——QuartzDemo.rar
OpenSymphony 的Quartz提供了一个比较完美的任务调度解决方案。 Quartz 是个开源的作业调度框架,为在 Java 应用程序中进行作业调度提供了简单却强大的机制。 Quartz中有两个基本概念:作业和触发器。作业是...
主要介绍了spring整合Quartz框架过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
quartz的项目源码——用于和文章配套学习
NULL 博文链接:https://evin7.iteye.com/blog/482450
java quartz详解
定时任务quartz
Spring Boot 配置 Quartz 定时任务(csdn)————程序
刘冬编写Spring.NET学习笔记25——整合Quartz.NET例子。 原文: http://www.cnblogs.com/GoodHelper/archive/2009/11/20/SpringNet_QuartzNet.html
NULL 博文链接:https://chaoyi.iteye.com/blog/2170208
主要介绍了Java Spring中Quartz调度器详解及实例的相关资料,需要的朋友可以参考下
1、Quartz2D自定义view 2、核心方法drawRect: 3、Quartz2D绘图的代码步骤 1、常用拼接路径函数