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,该类代码如下:
继承的QuartzJobBean类来自org.springframework.scheduling包,在我们的工程需要导入quartz.jar包。在executeInternal方法中可能会抛出JobExecutionException。
JobData类代码如下:
第二步:配置相关xml文件。
为了方便模块管理,我们把定时任务的配置文件单独列出来,如我们可以新建一个timer.xml的文件,在该文件中对其进行配置。timer.xml配置文件如下:
该配置文件在web.xml配置文件中对spring进行配置的时候加上该文件即可。
附任务触发时间的写法说明:
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来实现定时任务
- 使用spring quartz实现定时任务
- 使用Spring+Quartz实现定时任务
- Spring中使用quartz插件实现定时任务
- Spring与Quartz集成实现定时调度任务的简单使用
- spring中使用quartz实现定时任务
- 使用spring quartz实现定时任务
- 使用Spring3+Quartz实现定时任务
- 使用Spring + quartz实现定时任务调度
- 使用Spring + quartz实现定时任务调度
- 关于Java Web 使用Spring中使用Quartz(定时调用、实现固定时间执行), 触发定时器(执行某些任务)的实例
- 使用spring quartz实现定时任务
- spring里面使用quartz实现定时任务
- 如何使用spring 定时调度 【 Spring+Quartz实现定时任务 】
- 使用quartz+spring实现简单的可配置化的定时任务(可和数据库配套使用)
- 使用spring quartz实现定时任务
- spring boot 整合 quartz 集群环境 实现 动态定时任务配置【原】
- 使用Spring的@Scheduled实现定时任务
- Spring+Quartz实现定时任务的配置方法--Cron表达式解释
- Spring 3整合Quartz 2实现定时任务--转