quartz2.2.1 example 08代码分析

来源:互联网 发布:图解网络硬件下载 编辑:程序博客网 时间:2024/04/29 03:59

package com.quartz.fsl.test.example8;


import java.util.Date;


import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.quartz.JobKey;


import com.qdwb.mlxc.util.LogSelf;


public class SimpleJob implements Job {
public void execute(JobExecutionContext context)
throws JobExecutionException {
JobKey jobKey = context.getJobDetail().getKey();
LogSelf.fslLog.info("SimpleJob 的JOB名称: " + jobKey + " 任务调度时间: "+ new Date());
}
}

---------------------------------------------------------------------------------------

package com.quartz.fsl.test.example8;



import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import org.quartz.DateBuilder;
import org.quartz.JobBuilder;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerFactory;
import org.quartz.SchedulerMetaData;
import org.quartz.SimpleScheduleBuilder;
import org.quartz.SimpleTrigger;
import org.quartz.TriggerBuilder;
import org.quartz.TriggerUtils;
import org.quartz.impl.StdSchedulerFactory;
import org.quartz.impl.calendar.AnnualCalendar;


import com.qdwb.mlxc.util.LogSelf;


/*
 * 在实际任务调度中,我们不可能一成不变地按照某个周期性的调度规则运行任务,
 * 必须考虑到实现生活中日历上特定日期,就象习惯了大男人作风的人在2月14号也会有不同表现一样。
 */
public class CalendarExample {
public void run() throws Exception {


SchedulerFactory sf = new StdSchedulerFactory();
Scheduler sched = sf.getScheduler();
//①法定节日是以每年为周期的,所以使用AnnualCalendar
AnnualCalendar holidays = new AnnualCalendar(); // 常用日历


/*
* 日历(Calendars) Quartz
* Calendar对象(不是java.util.Calendar对象)能够与被注册进Scheduler的Trigger关联
* 。Calendar对排除Trigger的时间段是很有用的,
* 例如,我们可以创建一个在2014-06-30上午9:30触发Job的Trigger,就在其中增加一个排除所有工作假期的Calendar。
*/
//这个cal有问题,此处我本想设置成当天6月30日15点42分时算假期,不执行,但效果却是不论我怎么设置,都是不执行
Calendar cal = new GregorianCalendar(2014,5,30);
// cal.set(cal.HOUR, 15);
// cal.set(cal.MINUTE,42);
// // cal.set(cal.SECOND,);
// //cal.set(cal.MILLISECOND, 0);
holidays.setDayExcluded(cal, true); // 不包含


//②五一劳动节
Calendar laborDay = new GregorianCalendar();
laborDay.add(Calendar.MONTH,4);
laborDay.add(Calendar.DATE,1);
holidays.setDayExcluded(laborDay, true); //②-1:排除的日期,如果设置为false则为包含

Calendar christmas = new GregorianCalendar(2014, 11, 25);//月范围是:0-11
holidays.setDayExcluded(christmas, true);


//④向Scheduler注册日历
sched.addCalendar("holidays", holidays, false, false);


Date runDate = DateBuilder.dateOf(0, 0,15, 30,5); // 开始时间:6月30号的第15秒时


JobDetail job = JobBuilder.newJob(SimpleJob.class).withIdentity("job1",
"group1").build();


// 每30秒执行一次
SimpleTrigger trigger = (SimpleTrigger) TriggerBuilder.newTrigger()
.withIdentity("trigger1", "group1").startAt(runDate)
.withSchedule(
SimpleScheduleBuilder.simpleSchedule()
.withIntervalInSeconds(30).repeatForever())
.modifiedByCalendar("holidays").build();
//trigger.setCalendarName("holidays");⑥让Trigger应用指定的日历规则
Date firstRunTime = sched.scheduleJob(job, trigger);


LogSelf.fslLog.info(job.getKey() + " 将会运行时间: " + firstRunTime
+ " 重复次数: " + trigger.getRepeatCount() + " 次,每隔"
+ (trigger.getRepeatInterval() / 1000L) + " 秒");
LogSelf.fslLog.info("------- 手动触发Scheduler ----------------");
sched.start();


LogSelf.fslLog.info("-------睡眠5分钟... --------------");
try {
Thread.sleep(300000L);
} catch (Exception e) {
}


LogSelf.fslLog.info("-------停止调度---------------------");
sched.shutdown(true);


SchedulerMetaData metaData = sched.getMetaData();
LogSelf.fslLog.info("Executed " + metaData.getNumberOfJobsExecuted()
+ " jobs.");
}


public static void main(String[] args) throws Exception {
CalendarExample example = new CalendarExample();
example.run();
}
}
0 0
原创粉丝点击