您的位置:首页 > 编程语言 > Java开发

spring使用Quartz实现定时任务

2012-10-14 17:44 881 查看
在项目中,定时实现某个任务是经常遇到的事情。在企业级的项目中,Quartz这一框架能够很好的帮我们完成定时任务。Quartz是一个开源的作业调度框架,它完全由Java写成,并设计用于J2SE和J2EE应用中。它提供了巨大的灵 活性而不牺牲简单性。你能够用它来为执行一个作业而创建简单的或复杂的调度。它有很多特征,如:数据库支持,集群,插件,EJB作业预构建,JavaMail及其它,支持cron-like表达式等等。该项目已经被
Terracotta收购。

下面就总结下自己对Quartz使用的简单总结。在spring使用Quartz有两种方法:继承QuartzJobBean与使用MethodInvokingJobDetailFactoryBean。我们项目中使用的是第一种方法,下面的总结也是使用第一种方法实现的。至于这两种使用方法的区别暂时还没有查阅相关资料。

第一步:新建一个job类名为:QuartzDemoJob,该类代码如下:

package com.joyun.quartz;
import org.quartz.JobExecutionContext;
import org.springframework.scheduling.quartz.QuartzJobBean;

public class QuartzDemo extends QuartzJobBean {
private JobData jobData; //JobData为自定义类
@Override
public void executeInternal(JobExecutionContext context){
System.out.println(jobData.getData()+" is executed");
}
public JobData getJobData() {
return jobData;
}
public void setJobData(JobData jobData) {
this.jobData = jobData;
}
}


继承的QuartzJobBean类来自org.springframework.scheduling包,在我们的工程需要导入quartz.jar包。在executeInternal方法中可能会抛出JobExecutionException。

JobData类代码如下:

package com.joyun.quartz.bean;
import java.util.Date;
public class JobData {
public String getData(){
return "Data from JobData at "+new Date().toString();//输出当前时间
}
}

第二步:配置相关xml文件。

为了方便模块管理,我们把定时任务的配置文件单独列出来,如我们可以新建一个timer.xml的文件,在该文件中对其进行配置。timer.xml配置文件如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<bean id="jobData" class="cm.joyun.bean.JobData"></bean>
<bean id="jobDetailBean" class="org.springframework.scheduling.quartz.JobDetailBean">
<property name="jobClass" value="com.joyun.Qquartz.QuartzDemoJob"></property>
<property name="jobDataAsMap">
<map>
<entry key="jobData" value-ref="jobData"></entry>
</map>
</property>
</bean><bean id="cronTriggerBean" class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail" ref="jobDetailBean"></property>
<property name="cronExpression" value="0 37-38 15 * * ?"/><!--value表示任务具体的触发执行时间-->
</bean>
<bean id="scheduledFactoryBean" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref bean="cronTriggerBean"/>
</list>
</property>
</bean>

该配置文件在web.xml配置文件中对spring进行配置的时候加上该文件即可。

附任务触发时间的写法说明:

"0 0 12 * * ?" 每天中午12点触发

"0 15 10 ? * *" 每天上午10:15触发

"0 15 10 * * ?" 每天上午10:15触发

"0 15 10 * * ? *" 每天上午10:15触发

"0 15 10 * * ? 2005" 2005年的每天上午10:15触发

"0 * 14 * * ?" 在每天下午2点到下午2:59期间的每1分钟触发

"0 0/5 14 * * ?" 在每天下午2点到下午2:55期间的每5分钟触发

"0 0/5 14,18 * * ?" 在每天下午2点到2:55期间和下午6点到6:55期间的每5分钟触发

"0 0-5 14 * * ?" 在每天下午2点到下午2:05期间的每1分钟触发

"0 10,44 14 ? 3 WED" 每年三月的星期三的下午2:10和2:44触发

"0 15 10 ? * MON-FRI" 周一至周五的上午10:15触发

"0 15 10 15 * ?" 每月15日上午10:15触发

"0 15 10 L * ?" 每月最后一日的上午10:15触发

"0 15 10 ? * 6L" 每月的最后一个星期五上午10:15触发

"0 15 10 ? * 6L 2002-2005" 2002年至2005年的每月的最后一个星期五上午10:15触发

"0 15 10 ? * 6#3" 每月的第三个星期五上午10:15触发
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: