quartz2.3.0使用日历排除不应该执行任务的时间段
Posted zhuwenjoyce
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了quartz2.3.0使用日历排除不应该执行任务的时间段相关的知识,希望对你有一定的参考价值。
Job任务类
package org.quartz.examples.example8; import java.util.Date; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.quartz.Job; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; import org.quartz.JobKey; /** * 这只是一个简单的工作,它会被例1多次触发 */ public class SimpleJob implements Job private static Logger LOG = LoggerFactory.getLogger(SimpleJob.class); //必须要有public修饰的无参构造函数 public SimpleJob() //定时器执行方法 public void execute(JobExecutionContext context) throws JobExecutionException // 这个作业只是打印出它的作业名称以及它运行的日期和时间 JobKey jobKey = context.getJobDetail().getKey(); LOG.info("SimpleJob says: " + jobKey + " executing at " + new Date());
调度器类
package org.quartz.examples.example8; import static org.quartz.DateBuilder.dateOf; import static org.quartz.JobBuilder.newJob; import static org.quartz.SimpleScheduleBuilder.simpleSchedule; import static org.quartz.TriggerBuilder.newTrigger; import org.quartz.JobDetail; import org.quartz.Scheduler; import org.quartz.SchedulerFactory; import org.quartz.SchedulerMetaData; import org.quartz.SimpleTrigger; import org.quartz.examples.example2.SimpleJob; import org.quartz.impl.StdSchedulerFactory; import org.quartz.impl.calendar.AnnualCalendar; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.util.Calendar; import java.util.Date; import java.util.GregorianCalendar; /** * 这个示例将演示如何使用日历排除不应该进行调度的时间段,比如假期。 */ public class CalendarExample final Logger LOG = LoggerFactory.getLogger(CalendarExample.class); public void run() throws Exception // 初始化一个调度工厂,并实例化一个调度类 SchedulerFactory sf = new StdSchedulerFactory(); Scheduler sched = sf.getScheduler(); // 将假期日历添加到日程中 AnnualCalendar holidays = new AnnualCalendar(); // 2005年6月4日 Calendar fourthOfJuly = new GregorianCalendar(2005, 6, 4); holidays.setDayExcluded(fourthOfJuly, true); // 2005年9月31日 Calendar halloween = new GregorianCalendar(2005, 9, 31); holidays.setDayExcluded(halloween, true); // 2005年11月25日 Calendar christmas = new GregorianCalendar(2005, 11, 25); holidays.setDayExcluded(christmas, true); // 告诉调度器我们的假期安排 sched.addCalendar("holidays", holidays, false, false); // 安排一项工作每小时运行一次:10月31日10点0分0秒 ,秒、分、小时、日、月 Date runDate = dateOf(0, 0, 10, 31, 10); JobDetail job = newJob(SimpleJob.class).withIdentity("job1", "group1").build(); // 间隔1小时运行一次,无限循环 SimpleTrigger trigger = newTrigger().withIdentity("trigger1", "group1").startAt(runDate) .withSchedule(simpleSchedule().withIntervalInHours(1).repeatForever()).modifiedByCalendar("holidays") .build(); Date firstRunTime = sched.scheduleJob(job, trigger); // 由于10月31日是万圣节,所以我们将在之后一天11月1日运行任务 LOG.info(job.getKey() + " will run at: " + firstRunTime + " and repeat: " + trigger.getRepeatCount() + " times, every " + trigger.getRepeatInterval() / 1000 + " seconds"); sched.start(); // 睡眠30秒 Thread.sleep(30L * 1000L); sched.shutdown(true); LOG.info("------- Shutdown Complete -----------------"); SchedulerMetaData metaData = sched.getMetaData(); LOG.info("Executed " + metaData.getNumberOfJobsExecuted() + " jobs."); public static void main(String[] args) throws Exception CalendarExample example = new CalendarExample(); example.run();
以上是关于quartz2.3.0使用日历排除不应该执行任务的时间段的主要内容,如果未能解决你的问题,请参考以下文章
quartz2.3.0job任务监听器,监听任务执行前后取消手动处理方法
quartz2.3.0(十五)执行暂停继续执行清除,花式操作数据库中持久化的job任务