首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

Spring复习(7)-有关定时任务Quartz的示例

2012-11-16 
Spring温习(7)--有关定时任务Quartz的示例实际项目中有关定时任务的使用还是比较普遍的,比如定时做报表,定

Spring温习(7)--有关定时任务Quartz的示例

实际项目中有关定时任务的使用还是比较普遍的,比如定时做报表,定时取数据,定时发送邮件等等,不过我们熟悉的并且比较方便的要么就是TimerTask要么就是Quartz,不过要按方便来讲和使用率来讲,大家还是普遍愿意在实际项目中使用更优秀的Quartz,尤其是和Spring配合起来十分方便,不过TimerTask也可以配置在Spring中

首先还是讲Quartz吧,之前大家都知道在不需要框架的项目中,我们的定时任务通常将执行代码写入到servlet的init方法中,然后在web.xml中配置

<servlet><servlet-name>Init</servlet-name><servlet-class>com.cn.util.timer.TestTimerTaskServlet</servlet-class><load-on-startup>1</load-on-startup>  </servlet>

?

这样的代码,只要服务器一直在开启状态,就会按时执行任务的

一般来说Quart中有几个比教重要的概念:定时任务,触发器Trigger,调度器Scheduler,并且定时任务需要传入一个具体执行任务的类,这个类必须继承import org.quartz.Job这个类,并且实现execute这个方法,至于execute方法里面就是功能代码了,就是上面提到的统计报表,获取数据,发送邮件之类的事情了,欲了解更多的在Java中使用Quartz的知识请参考我很久以前写的有关Quartz的文章。

Spring和Quartz的整合

必须包


Spring复习(7)-有关定时任务Quartz的示例
?

?

首先说一种不必继承任何类的具体定时任务的执行类JobTask.java

package com.javacrazyer.comon;public class JobTask {public void doJob(){System.out.println("执行发送邮件的程序...");}}

?

那么这个具体实现功能的类就没有继承任何其他第三方类

?Spring的配置文件applicationContext.xml具体配置

<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"xmlns:tx="http://www.springframework.org/schema/tx"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsdhttp://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsdhttp://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd"><bean id="jobTask" ref="jobTask" />       <!--目标bean中的目标方法:doJob方法,意思为将来执行定时任务就是该bean中的doJob方法--><property name="targetMethod" value="doJob" /></bean><!-- 使用triggers和SchedulerFactoryBean来包装任务 --><!--定义触发的时间--> <bean id="cronTrigger" ref="jobDetail" /><!--                       cron表达式          秒       分 时  日 月  周  (年) --><property name="cronExpression" value="0/15 * * * * ?" /></bean><!--  管理触发器,就相当于在java中使用Quartz代码中的调度器scheduler  --><bean /></list></property></bean></beans>

?

有关cron表达式的的我之前的文章介绍过

?

大家发现没有JobDetail 那里配置指明了类,还必须指明具体要执行的方法,具体原因是MethodInvokingJobDetailFactoryBean这个类配置里面必须要求同时配上类和方法,所以我之前的类就没有继承任何类。

?

那么,如果有人懒得配置方法的话,还想按Quartz正常道路来走的话,那么具体执行类要变化了

package com.javacrazyer.comon;import org.quartz.JobExecutionContext;import org.quartz.JobExecutionException;import org.springframework.scheduling.quartz.QuartzJobBean;public class JobTask extends QuartzJobBean{@Overrideprotected void executeInternal(JobExecutionContext arg0)throws JobExecutionException {System.out.println("执行发送邮件的程序...");}}

?

并且spring配置中个JobDetail那个bean的整体换成

<bean id="jobDetail"          name="code"><?xml version="1.0" encoding="UTF-8"?><web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"><!-- Spring ApplicationContext Definition --><context-param><param-name>contextConfigLocation</param-name><param-value>/WEB-INF/applicationContext.xml</param-value></context-param><listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener><welcome-file-list><welcome-file>index.jsp</welcome-file></welcome-file-list></web-app>

?

好了部署项目吧,启动tomcat吧,看看control控制台是不是每隔15秒就输出

执行发送邮件的程序...

?

?差点忘记还有TimerTask跟Spring的结合的配置,需要一个实现的具体类

package com.javacrazyer.comon;import java.util.TimerTask;public class EamilTask extends TimerTask{  @Overridepublic void run() {System.out.println("开始收取数据了.........");}}

?

spring配置

<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"xmlns:tx="http://www.springframework.org/schema/tx"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsdhttp://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsdhttp://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd"><bean id="eamilTask" /><!-- 对定时器进行设置每隔30秒调用一次emailTask --><bean id="springSchedule" ref="eamilTask"></property><property name="period"><value>10000</value></property><property name="delay"><value>1000</value></property></bean><!--  启动定时器  --><bean id="startTimeTask" /></list></property></bean></beans>

?

?同样,启动服务器后,发现每隔10秒,执行下输出

开始收取数据了.........?

?

热点排行