quartz入门

quartz任务框架有两个重要对象,作业JobDetail和触发器Trigger,它们是多对多的关系

作业

JobDetail

JobDetail jobDetail = JobBuilder.newJob(HelloQuartzJob.class)  
                .withIdentity("testJob_1", "group_1")  
                .build(); 

触发器

Trigger,Quartz有两大触发器,SimpleTrigger和CronTrigger

Trigger trigger = TriggerBuilder.newTrigger()//创建一个新的TriggerBuilder来规范一个触发器  
                .withIdentity("trigger_1", "group_1")//给触发器一个名字和组名  
//              .startNow()//立即执行  
                .startAt(runTime)//设置触发开始的时间  
                .withSchedule  
                (  
                    SimpleScheduleBuilder.simpleSchedule()  
                    .withIntervalInSeconds(10)//时间间隔  
                    .withRepeatCount(5)//重复次数(将执行6次)  
                )  
                .build();//产生触发器  
//

 String cronExpression = "30/5 * * * * ?"; // 每分钟的30s起,每5s触发任务        

 CronTrigger cronTrigger = new CronTriggerImpl("cronTrigger", 

 Scheduler.DEFAULT_GROUP, cronExpression);

cron有6个必要组件和1个可选组件:年(可选)-星期-月-日-时-分-秒。

misfire特性

在 Quartz 应用中,misfired job 是经常遇到的情况。一般来说,下面这些原因可能造成 misfired job:

1)系统因为某些原因被重启。在系统关闭到重新启动之间的一段时间里,可能有些任务会被 misfire;

2)Trigger 被暂停(suspend)的一段时间里,有些任务可能会被 misfire;

3)线程池中所有线程都被占用,导致任务无法被触发执行,造成 misfire;

4)有状态任务在下次触发时间到达时,上次执行还没有结束;

为了处理 misfired job,Quartz 中为 trigger 定义了处理策略,主要有下面两种:

MISFIRE_INSTRUCTION_FIRE_ONCE_NOW:针对 misfired job 马上执行一次;

MISFIRE_INSTRUCTION_DO_NOTHING:忽略 misfired job,等待下次触发;

建议读者在应用开发中,将该设置作为可配置选项,使得用户可以在使用过程中,针对已经添加的 tirgger 动态配置该选项。

原文地址:https://www.cnblogs.com/liluredhat/p/6757829.html