排除每年中的几天,AnnualCalendar

来源:互联网 发布:域名反向查询 编辑:程序博客网 时间:2024/04/29 11:01
package com.cavaness.quartzbook.chapter3;import java.text.SimpleDateFormat;import java.util.ArrayList;import java.util.Calendar;import java.util.Date;import java.util.List;import org.apache.commons.logging.Log;import org.apache.commons.logging.LogFactory;import org.quartz.JobDetail;import org.quartz.Scheduler;import org.quartz.SchedulerException;import org.quartz.SimpleTrigger;import org.quartz.Trigger;import org.quartz.TriggerUtils;import org.quartz.impl.StdSchedulerFactory;import org.quartz.impl.calendar.AnnualCalendar;/** * 编程式调度器,排除某些日子后执行作业 * @author Kevin * */public class Listing_4_9 {private static Log log = LogFactory.getLog(Listing_3_5.class);/** * 创建,启动调度器 * @throws SchedulerException  */public void startScheduler() throws SchedulerException {Scheduler scheduler = null;try {scheduler = StdSchedulerFactory.getDefaultScheduler();} catch (SchedulerException e) {log.error("调度器创建失败!", e);throw e;}try {scheduler.start();} catch (SchedulerException e) {log.error("调度器启动失败!", e);throw e;}log.info("调度器启动时间:" + new SimpleDateFormat("yyyy.MM.dd HH:mm:ss").format(new Date()));scheduleJob(scheduler, PrintInfoJob.class);}/** * 配置作业,创建触发器  * @param scheduler 调度器 * @param jobClass 作业所在的类 * @throws SchedulerException  */public void scheduleJob(Scheduler scheduler, Class jobClass) throws SchedulerException {AnnualCalendar annualCalendar = new AnnualCalendar(); // 排除7.4,7.6,注意:调度器最好不要在排除的那一天启动,否则,调度作业的时间是不确定的Calendar calendar = Calendar.getInstance(); // JavaSE中的calendarcalendar.set(Calendar.MONTH, Calendar.JULY);calendar.set(Calendar.DAY_OF_MONTH, 4);Calendar calendar2 = Calendar.getInstance(); // JavaSE中的calendarcalendar2.set(Calendar.MONTH, Calendar.JULY);calendar2.set(Calendar.DAY_OF_MONTH, 6);ArrayList<Calendar> calenderList = new ArrayList<Calendar>();calenderList.add(calendar);calenderList.add(calendar2);annualCalendar.setDaysExcluded(calenderList);try {scheduler.addCalendar("bankHolidays", annualCalendar, true, true); // 两个true分别表示替换和更新原来的AnnualCalendar} catch (SchedulerException e) {log.error("为调度器关联annualCalendar失败!", e);throw e;} Trigger printInfoTrigger = TriggerUtils.makeSecondlyTrigger("printInfoTrigger", 100, SimpleTrigger.REPEAT_INDEFINITELY);printInfoTrigger.setStartTime(new Date()); // 创建触发器printInfoTrigger.setCalendarName("bankHolidays"); // 关联触发器和calendarJobDetail printInfoJobDetail = new JobDetail("printInfoJobDetail", Scheduler.DEFAULT_GROUP, jobClass);try {scheduler.scheduleJob(printInfoJobDetail, printInfoTrigger); // 关联触发器和调度器} catch (SchedulerException e) {log.error("关联触发器printInfoTrigger和调度器scheduler失败!", e);throw e;} }public static void main(String[] args) throws SchedulerException {Listing_4_9 listing_4_9 = new Listing_4_9();listing_4_9.startScheduler();}}

原创粉丝点击