Spring4学习:任务调度和异步执行器之Quartz框架

一、Quartz基础知识

1、Quartz基础结构

(1)Job:接口,只有一个方法void execute(JobExecutionContext context),通过实现该接口来定义需要执行的任务,JobExecutionContext类提供了调度上下文的各种信息。Job运行时的信息保存在JobDataMap实例中。

(2)JobDetail:Quartz在每次支持Job时,都重新创建一个Job实例,所以它不是直接接收一个Job实例,而是接受一个Job实现类,以便运行时通过newInstance()的反射机制实例化Job。通过JobDetail来描述Job的实现类及其他相关的静态信息,如Job名称、描述、关联监听器等信息。

(3)Trigger:描述触发Job执行的时间触发规则。主要有SimpleTrigger和CronTrigger这两个子类。当仅需触发一次或者以固定间隔周期性执行时,选择SimpleTrigger,而CronTrigger则可以通过Cron表达式定义出各种复杂的调度方法。

(4)Calendar:一个Trigger可以和多个Calendar关联,以便排除或包含某些时间点。Quartz提供了若干个Calendar的实现类,如AnnualCalendar、MonthlyCalendar、WeeklyCalendar分别针对每年、每月和每周进行定义。

(5)Scheduler:代表一个Quartz的独立运行容器,Trigger和JobDetail可以注册到Scheduler中,二者在Scheduler中拥有各自的组及名称。组及名称是Scheduler查找定位容器中某一对象的依据。Scheduler可以将Trigger绑定到某一JobDetail中,这样,当Trigger被触发时,对应的Job就被执行。

(6)ThreadPool:Scheduler使用一个线程池作为任务运行的基础设施,任务通过共享线程池中的线程来提高运行效率。

2、使用SimpleTrigger

SimpleTrigger(String name,String group):通过构造函数指定Trigger所属组和名称。

SimpleTrigger(String name,String group,Date startTime):指定Trigger所属组、名称和触发的时间。

SimpleTrigger(String name,String group,Date startTime,Date endTime,int repeatCount,long repeatInterval):指定所属组、名称、开始时间、结束时间、重复执行次数、时间间隔。

SimpleTrigger(String name,String group,Date startTime,String jobName,String jobGroup,Date endTime,int repeatCount,long repeatInterval)在指定触发参数的同时,通过jobGroup和jobName,使该Trigger和Scheduler中的某个任务关联起来。

public class SimpleJob implements Job {
	public void execute(JobExecutionContext jobCtx)
			throws JobExecutionException {
		System.out.println(jobCtx.getTrigger().getName()
				+ " triggered. time is:" + (new Date()));
	}
}
public class SimpleTriggerRunner {
	public static void main(String args[]) {
		try {
			JobDetail jobDetail = new JobDetail("job1_1", "jgroup1",SimpleJob.class);
			SimpleTrigger simpleTrigger = new SimpleTrigger("trigger1_1","tgroup1");
			simpleTrigger.setStartTime(new Date());
			simpleTrigger.setRepeatInterval(2000);
			simpleTrigger.setRepeatCount(100);        
			SchedulerFactory schedulerFactory = new StdSchedulerFactory();
			Scheduler scheduler = schedulerFactory.getScheduler();
			scheduler.scheduleJob(jobDetail, simpleTrigger);
			scheduler.start();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

3、使用CronTrigger

(1)Cron表达式

1>星号(*):可用在所有字段中,表示对应时间域的每一个时刻。如:*在分钟字段表示每分钟。

2>问好(?):只在日期和星期字段中使用,相当于占位符。

3>减号(-):表示一个范围。如:10-12表示10点到12点

4>逗号(,):表示一个列表值。如:MON,WED,FRI表示星期一,星期但和星期五

5>斜杠(/):x/y表示一个等步长序列,x

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值