spring之spring与Quartz整合(一)

 

spring之spring与Quartz整合(一)

----------

 

不通过Spring的支持来使用Quartz

 

要使用Quartz进行调度,首先得实现Job接口创建任务。为了在应用程序中使用Quartz,必须在classpath中包含quartz-all-xxx.jar,commons-collections.jar和jta.jar。  如例:

package com.apress.springrecipes.replicator;
...
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;

public class FileReplicationJob implements Job{
	public void execute(JobExecutionContext context)throws JobExecutionException{
		Map dataMap = context.getJobDetail().getJobDataMap();
		FileReplicator fileReplicator = (FileReplicator)dataMap.get("fileReplicator");
		try{
			fileReplicator.replicate();
		}catch(IOException e){
			throw new JobExecutionException(e);
		}
	}
}

创建完任务之后,通过Quartz API对它进行配置和调度。例如,下面的调度程序每隔60秒运行一次文件复制任务,第一次执行时有5秒延迟。

package com.apress.springrecipes.replicator;
...
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SimpleTrigger;
import org.quartz.impl.StdSchedulerFactory;
....

public class Main{
	public static void main(String[] args)throws Exception{
		ApplicationContext context = 
			new ClassPathXmlApplicationContext("beans.xml");
		FileReplicator documentReplicator = (FileReplicator)context.
			getBean("documentReplicator");
		JobDetail job = new JobDetail();
		job.setName("documentReplicationJob");
		job.setJobClass(FileReplicationJob.class);
		Map dataMap = job.getJobDataMap();
		dataMap.put("fileReplicator",documentReplicator);
		SimpleTrigger trigger = new SimpleTrigger();
		triger.setName("documentReplicationJob");
		trigger.setStartTime(new Date(System.currentTimeMillis()+5000));
		trigger.setRepeatCount(SimpleTringger.REPEAT_INDEFINITELY);
		trigger.setRepeatInterval(60000);
		Scheduler scheduler = new StdSchedulerFactory().getScheduler();
		scheduler.start();
		scheduler.scheduleJob(job,trigger);
	}
}

在Main类中,首先在JobDetail对象中为文件复制任务配置任务细节,并在它的jobDataMap属性中准备任务数据。接下来,创建SimpleTrigger对象配置调度属性。最后,创建调度器来利用该触发器运行任务。

Quartz支持两种类型的触发器:SimplerTrigger和CronTrigger。SimpleTrigger允许设定一些trigger属性,例如起始时间、终止时间、重复间隔以及重复次数。CronTrigger接受Unix的cron表达式,允许你指定任务运行的次数。

例如,可以用下面的CronTrigger代替之前的SimpleTrigger,在每天的17:30运行任务。

CronTrigger trigger = new CronTrigger();
trigger.setName("documentReplicationJob");
trigger.setCronExpression(0 30 17 * * ?);

cron表达式由7个域组成(最后一个域是可选的),用空格隔开。

位置域名称取值范围
1Second0~59
2Minute0~59
3Hour0~23
4Day of month1~31
5Month1~12或者JAN-DEC
6Day of week1~7或者SUN-SAT
7Year(可选)1970~2099

cron表达式的每个部分都可以赋予一个特定的值(比如3)、一个范围(比如1~5)、一个列表(比如1,3,5)、一个通配符(*:匹配所有的值)或者一个问号(?:用在"Day of month"和"Day of week"域中,用来匹配这两个域其中的一个,不能同时匹配).

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值