Quartz 主要模块
Scheduler 与调度器的主要API进行交互
Job 实现想要的调度器的组件
Trigger 将执行一个给定的工作时间表的组件
JobBuilder 用于定义/构建JobDetail实例
TriggerBuilder 用于定义/构建触发实例
JobDataMap 可以用来保存任何数量的数据对象(序列化),
JobDataMap JavaMap接口的一个实现,并且有一些添加便利的方法来存储和检索数据的原始类型
HelloWorld版的简单Job
public class HelloJob implements Job {
public HelloJob() {
}
public void execute(JobExecutionContext context)
throws JobExecutionException{
System.err.println("Hello! HelloJob is executing.");
}
}
创建带getter/setter方法的Job
/**
* 创建带getter/setter的Job
*/
public class DumbJob implements Job {
String jobSays;
float myFloatValue;
public DumbJob() {
}
public void execute(JobExecutionContext context)
throws JobExecutionException{
//groupName.jobName
JobKey key = context.getJobDetail().getKey();
//序列化对象
// JobDataMap dataMap =
context.getJobDetail().getJobDataMap();
// String jobSays = dataMap.getString("jobSays");
// float myFloatValue = dataMap.getFloat("myFloatValue");
//获得get/set属性
JobDataMap dataMap = context.getMergedJobDataMap();
String jobSays = dataMap.getString("jobSays");
float myFloatValue = dataMap.getFloat("myFloatValue");
System.err.println("Instance " + key + " of DumbJob says: " + jobSays + ", and val is: " + myFloatValue);
}
public String getJobSays() {
return jobSays;
}
public void setJobSays(String jobSays) {
this.jobSays = jobSays;
}
public float getMyFloatValue() {
return myFloatValue;
}
public void setMyFloatValue(float myFloatValue) {
this.myFloatValue = myFloatValue;
}
}
简单的运行Job
public static void main(String[] args) {
try {
// 创建定时器
Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
// 启动定时器
scheduler.start();
//定义一个Job
JobDetail job = newJob(HelloJob.class)
.withIdentity("myJob", "FirstGroup") //创建工作组
.build();
// JobDetail job = newJob(HelloJob.class)
// .withIdentity("myJob") //创建工作组
// .build();
// JobDetail job = newJob(DumbJob.class)
// .withIdentity("myJob", "FirstGroup") // name "myJob", group "group1"
// .usingJobData("jobSays", "Hello World!")
// .usingJobData("myFloatValue", 3.141f)
// .build();
//设置Calendar
// HolidayCalendar cal = new HolidayCalendar();
// cal.addExcludedDate( new Date() );
//
// scheduler.addCalendar("myHolidays", cal, false, false);
// Trigger trigger = newTrigger()
// .withIdentity("helloTrigger", "FirstGroup")
// .startNow() //触发
// .withSchedule(simpleSchedule()
// .withIntervalInSeconds(40) //设置运行间隔
// .repeatForever())
// .withPriority(1) //多个触发器时,设置优先级
// .build();
// Trigger trigger = newTrigger()
// .withIdentity("myTrigger")
// .forJob("myJob")
// .withSchedule(dailyAtHourAndMinute(9, 40))
// .modifiedByCalendar("myHolidays")
// .build();
// SimpleTrigger trigger = (SimpleTrigger) newTrigger()
// .withIdentity("myTrigger", "FirstGroup")
// .startAt(futureDate(5, IntervalUnit.SECOND)) // 未来的5s钟内触发(今一次)
// .forJob("myJob", "FirstGroup") // identify job with name, group strings
// .build();
// SimpleTrigger trigger = newTrigger()
// .withIdentity("myTrigger", "FirstGroup")
// .withSchedule(simpleSchedule()
// .withIntervalInSeconds(5) //间隔5s重复执行
// .repeatForever())
// .endAt(dateOf(9, 55, 0)) //直到xx点xx分xx秒停止执行
// .build();
SimpleTrigger trigger = newTrigger()
.withIdentity("myTrigger")
.startAt(evenHourDate(null)) // 到下一小时开始 (minutes and seconds zero ("00:00"))
.withSchedule(simpleSchedule()
.withIntervalInHours(2) //间隔2小时执行一次
.repeatForever()) //永远重复
.build();
// SimpleTrigger trigger = newTrigger()
// .withIdentity("myTrigger", "FirstGroup")
// .withSchedule(simpleSchedule()
// .withIntervalInSeconds(5)
// .repeatForever()
// .withMisfireHandlingInstructionNextWithExistingCount())
// .build();
//用trigger告诉quartz安排job
scheduler.scheduleJob(job, trigger);
// 如果不关闭定时器,不会自动终止
//scheduler.shutdown();
} catch (SchedulerException se) {
se.printStackTrace();
}
}
SimpleTrigger常量失败指令
MISFIRE_INSTRUCTION_IGNORE_MISFIRE_POLICY
MISFIRE_INSTRUCTION_FIRE_NOW
MISFIRE_INSTRUCTION_RESCHEDULE_NOW_WITH_EXISTING_REPEAT_COUNT
MISFIRE_INSTRUCTION_RESCHEDULE_NOW_WITH_REMAINING_REPEAT_COUNT
MISFIRE_INSTRUCTION_RESCHEDULE_NEXT_WITH_REMAINING_COUNT
MISFIRE_INSTRUCTION_RESCHEDULE_NEXT_WITH_EXISTING_COUNT