spring使用Quartz实现定时任务

         在项目中,定时实现某个任务是经常遇到的事情。在企业级的项目中,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触发   


 

你可能感兴趣的:(spring,quartz,Class,任务,javamail,triggers)