本文主要是介绍Quartz1.6有状态JOB碰到的棘手问题既解决方案2,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
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
这篇关于Quartz1.6有状态JOB碰到的棘手问题既解决方案2的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!