quartz2.3.0(八)使用日曆排除不該該執行任務的時間段

Job任務類java

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

}
相關文章
相關標籤/搜索