Quartz1.6有状态JOB碰到的棘手问题既解决方案2

来源:互联网 发布:淘宝直播开通条件 编辑:程序博客网 时间:2024/05/03 17:19

a). 实现方式

2.0之前的版本是直接实现StatefulJob接口.

2.0版本:使用注解方式

@PersistJobDataAfterExecution
@DisallowConcurrentExecution
public class StatefulJobAction implements Job{ }

b). 对象操作

JobDetail jobDetail = null;
 JobDataMap dataMap = null;
CronTrigger cronTrigger = null;
String calendarName = triggerName;

DailyCalendar dailCalendar = new DailyCalendar(startTime,endTime);
dailyCalendar.setInvertTimeRange(true);
scheduler.addCalendar(calendarName,dailyCalendar,null,null);

 /** quartz1.6 */
/**
jobDetail = new JobDetail(jobName,jobGroup,StatefulJobAction.class);
dataMap = new JobDataMap();
dataMap.put("Scher",scher);
 jobDetail.setJobDataMap(dataMap);
cronTrigger = new CronTrigger(triggerName,triggerGroup); cronTrigger.setStartTime(startTime);
 cronTrigger.setEndTime(endTime);
cronTrigger.setCalendarName(calendarName);
*/

/** quartz2.0 */
jobDetail = newJob(StatefulJobAction.class).withIdentity(jobName,jobGroup).build();
dataMap = jobDetail.getJobDataMap();
dataMap.put("Scher",scher);

 //一次性构建触发器
/**
cronTrigger = newTrigger().withIdentity(triggerName,triggerGroup).withSchedule(cronSchedule(cronExpress)).startAt(startTime).endAt(endTime).modifiedByCalendar(triggerName).build;
*/

//分开构建触发器
TriggerBuilder<Trigger> triggerBuilder = newTrigger(); triggerBuilder.withIdentity(triggerName,triggerGroup);
if(StringUtils.isBlank(startTime)){
    triggerBuilder.startAt(new Date());
} else{
    triggerBuilder.startAt(startTime);
}
triggerBuilder.endAt(endTime);
 cronTrigger = triggerBuilder.withSchedule(cronSchedule(cronExpress)).modifiedByCalendar(triggerName).build();

//简单触发器 //
SimpleTrigger simpleTrigger = newTrigger().withSchedule(simpleSchedule()).withIntervalInSeconds(10).withRepeatCount(5).build();

另外有一点需要注意,可以看到quartz2.0版本有很多这种写法:newTrigger(),simpleScheduler().其实是采用了JDK1.5后提供的静态导入.

import static org.quartz.CronScheduleBuilder.cronSchedule;
import static org.quartz.JobBuilder.newJob;
import static org.quartz.SimpleScheduleBuilder.simpleSchedule; import static org.quartz.TriggerBuilder.newTrigger;

import static静态导入是JDK1.5中的新特性。静态导入是导入这个类里的静态方法。然后就可以直接用方法名调用静态方法,而不必用ClassName.方法名 的方式来调用。

这种方法的好处就是可以简化一些操作,例如打印操作System.out.println(...);就可以将其写入一个静态方法print(...),在使用时直接print(...)就可以了。

本篇文章来源于 Linux公社网站(www.linuxidc.com)  原文链接:http://www.linuxidc.com/Linux/2014-09/107005p2.htm

0 0
原创粉丝点击