Quartz定时任务

Quartz定时任务的核心是org.quartz.Scheduler我们对定时任务的一系列的操作都需要它来执行。在与spring的集成中,我们使用如下配置来创建这个bean。


<bean id="scheduler"	class="org.springframework.scheduling.quartz.SchedulerFactoryBean" lazy-init="false" autowire="no">
		<property name="configLocation" value="classpath:quartz.properties" />
</bean>

quartz.properties配置文件内容如下:

# 调度器的名字
org.quartz.scheduler.instanceName = WowojobScheduler
# 不使用RMI方式管理Quartz,使用 org.quartz.Scheduler
org.quartz.scheduler.rmi.export = false
org.quartz.scheduler.rmi.proxy = false
# 在任务执行前是否使用事务
org.quartz.scheduler.wrapJobExecutionInUserTransaction = false
# 配置线程池
org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool
org.quartz.threadPool.threadCount = 128
org.quartz.threadPool.threadPriority = 5
org.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread = false
# 配置作业存储方式,相当于扫描频率,此处为1分钟
org.quartz.jobStore.misfireThreshold = 60000
# 利用通常的内存来持久化调度程序信息
org.quartz.jobStore.class =org.quartz.simpl.RAMJobStore
# 跳过更新检查(到quartz官网检查新版本)
org.quartz.scheduler.skipUpdateCheck: true

在执行定时任务时,还需要知道两个类:

org.quartz.JobDetail:它保存了定时任务的基本信息,如任务名称等。其创建方式如下:

JobBuilder jobB = JobBuilder.newJob(clazz).withIdentity(jobName, Scheduler.DEFAULT_GROUP) ;		
jobB.usingJobData(jobDataMap);	
JobDetail jobDetail = jobB.build();

jobDataMap是org.quartz.JobDataMap类型的,以Map的形式存放了定时任务的一些信息。

clazz:就是真正要执行的定时任务的类。

 org.quartz.Trigger:保存了定时任务的执行时间,可使用cron表达式或使用执行次数和执行间隔来构造。

使用cron表达式的方式构造如下:

TriggerBuilder<Trigger> triggerB = TriggerBuilder.newTrigger().withIdentity(triggerName, Scheduler.DEFAULT_GROUP);
triggerB.withSchedule(CronScheduleBuilder.cronSchedule(ronExpression));
Trigger trigger = triggerB.build();

使用执行次数和执行间隔构造如下:

TriggerBuilder<Trigger> triggerB = TriggerBuilder.newTrigger()
		.withIdentity(triggerName),Scheduler.DEFAULT_GROUP);
triggerB.startAt(startTime);
triggerB.endAt(endTime);
SimpleScheduleBuilder ssb = simpleSchedule();
ssb.withRepeatCount(repeatCount);		
ssb.withIntervalInMilliseconds(repeatInterval);
triggerB.withSchedule(ssb);
Trigger trigger = triggerB.build();

jobDetail和trigger构造之后,使用scheduler.scheduleJob(jobDetail,trigger);来加入调度。

以上都是一些准备工作,具体的定时任务执行类只需要实现org.quartz.Job这个接口,重写publicabstractvoidexecute(JobExecutionContext jobexecutioncontext) throws JobExecutionException;这个方法即可。

通过jobexecutioncontext对象,可以获取JobDetail对象和JobDataMap对象,从而获取定时任务的基本信息。示例代码如下:

public class NotifyService  implements Job {
	@Override
	public void execute(JobExecutionContext context)
			throws JobExecutionException {
			JobDetail t = context.getJobDetail();
			JobDataMap map = t.getJobDataMap();
}
}


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值