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

本文介绍 Quartz 2.0 版本中定时任务的配置方法,包括使用注解的方式实现 StatefulJob 接口,以及如何通过 JobDetail 和 TriggerBuilder 构建任务详情和触发器。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值