`

Spring对java.util.Timer提供的任务调度支持

阅读更多

自从Java 2 SDK 1.3开始,借助于java.util.Timer类能够为企业应用提供任务调度支持。尽管现有的Timer没有Quartz功能丰富,但它能够满足简单的企业应用需求。而且,开发者也不用另外学习Quartz这样一套全新的类库,因为Java
2本身就内置了对Timer的支持。因此,Spring还是针对java.util.Timer提供了org.springframework.scheduling.timer包,以支持基于Timer的任务调度。
为了完成用户任务的开发,开发者提供的任务类必须继承于java.util.TimerTask类。下面摘录了imagedb中提供的ListImagesTimerTask类。用户任务被实现在run()中,此后Timer会依据开发者指定的调度规则重复调用到run()。
public class ListImagesTimerTask extends TimerTask {
......
public void run() {
      logger.info("Listing images in image database, scheduled by Timer");
      List images = this.imageDatabase.getImages();
      ......
}
}
在完成TimerTask的开发后,我们可以在WEB-INF/schedulingContext-timer.xml中配置它,相关配置摘录如下。ScheduledTimerTask用于制定调度规则,delay属性表示成功调度timerTask任务后第1次执行这一任务需等待的时间(单位:毫秒),period属性表示任务执行的间隔(单位:毫秒)。
<bean id="listImagesTimerTask"
class="org.springframework.samples.imagedb.scheduling.ListImagesTimerTask">
<property name="imageDatabase" ref="imageDatabase"/>
<property name="mailSender" ref="mailSender"/>
<property name="mailFrom" value="${mail.from}"/>
<property name="mailTo" value="${mail.to}"/>
</bean>
<bean id="listImagesScheduledTask" class="org.springframework.scheduling.timer.
ScheduledTimerTask">
<property name="timerTask" ref="listImagesTimerTask"/>
<property name="delay" value="10000"/>
<property name="period" value="10000"/>
</bean>
另一方面,开发者也可以将普通的POJO类指定为待调度的任务。Spring提供的timer包存在MethodInvokingTimerTaskFactoryBean辅助类,下面展示了它的使用。此时,targetObject属性用于指定目标受管POJO,而targetMethod属性用于指定这一受管POJO中的某个方法。用户任务被实现在checkImages()中,此后Timer会依据开发者指定的调度规则重复调用到checkImages()。MethodInvokingTimerTaskFactoryBean还暴露了targetClass、staticMethod属性,它们用于调用类中的静态方法。
<bean id="checkImagesTimerTask"
class="org.springframework.scheduling.timer.MethodInvokingTimerTaskFactoryBean">
<property name="targetObject" ref="imageDatabase"/>
<property name="targetMethod" value="checkImages"/>
</bean>
<bean id="checkImagesScheduledTask" class="org.springframework.scheduling.timer.
ScheduledTimerTask">
<property name="timerTask" ref="checkImagesTimerTask"/>
<property name="delay" value="5000"/>
<property name="period" value="5000"/>
</bean>
在制订上述2条调度规则后,开发者要实施它们,而TimerFactoryBean能够担当此任,示例配置如下。借助scheduledTimerTasks属性,开发者能够指定由若干ScheduledTimerTask构成的集合。
<bean id="timer" class="org.springframework.scheduling.timer.TimerFactoryBean">
<property name="scheduledTimerTasks">
      <list>
          <ref local="listImagesScheduledTask"/>
          <ref local="checkImagesScheduledTask"/>
      </list>
</property>
<property name="daemon" value="true"/>
</bean>
同Quartz相比,Timer支持的调度规则非常有限,而且它甚至没有提供内置的线程池。比如,Timer不能够指定类似于“某年某月某日要执行某任务”的调度规则。

分享到:
评论

相关推荐

    Spring定时器

    让应用程序定时执行某个任务. 从Java 1.3开始,Java SDK就通过java.util.Timer类提供了基本的调度功能。这个类允许你调度一个任务(通过java.util.TimerTask子类定义)按任意周期运行。

    Spring集成Quartz定时任务框架介绍.docx

    我们可以使用java.util.Timer结合java.util.TimerTask来完成这项工作,但时调度控制非常不方便,并且我们需要大量的代码。 使用Quartz框架无疑是非常好的选择,并且与Spring可以非常方便的集成,下面介绍它们集成...

    Spring 2.0 开发参考手册

    2.6.4. 对Java 5(Tiger)的支持 2.7. 移植到Spring 2.0 2.7.1. 一些变化 2.8. 更新的样例应用 2.9. 改进的文档 I. 核心技术 3. 控制反转容器 3.1. 简介 3.2. 容器和bean的基本原理 3.2.1. 容器 3.2.2. ...

    Spring中文帮助文档

    13.8. Spring对分段文件上传(multipart file upload)的支持 13.8.1. 介绍 13.8.2. 使用MultipartResolver 13.8.3. 在表单中处理分段文件上传 13.9. 使用Spring的表单标签库 13.9.1. 配置 13.9.2. form标签 ...

    Spring-Reference_zh_CN(Spring中文参考手册)

    2.6.4. 对Java 5(Tiger)的支持 2.7. 移植到Spring 2.0 2.7.1. 一些变化 2.7.1.1. Jar包 2.7.1.2. XML配置 2.7.1.3. Deprecated的类和方法 2.7.1.4. Apache OJB 2.7.1.5. iBatis 2.8. 更新的样例应用 2.9. 改进的...

    Spring API

    13.8. Spring对分段文件上传(multipart file upload)的支持 13.8.1. 介绍 13.8.2. 使用MultipartResolver 13.8.3. 在表单中处理分段文件上传 13.9. 使用Spring的表单标签库 13.9.1. 配置 13.9.2. form标签 ...

    spring chm文档

    13.8. Spring对分段文件上传(multipart file upload)的支持 13.8.1. 介绍 13.8.2. 使用MultipartResolver 13.8.3. 在表单中处理分段文件上传 13.9. 使用Spring的表单标签库 13.9.1. 配置标签库 13.9.2. form...

    JAVA上百实例源码以及开源项目源代码

    第一步:运行ServerData.java 启动服务器,然后服务器处于等待状态 第二步:运行LoginData.java 启动(客户端)登陆界面 输入用户名 ip为本机localhost 第三步:在登陆后的界面文本框输入文本,然后发送 可以同时启动...

    JAVA上百实例源码以及开源项目

    第一步:运行ServerData.java 启动服务器,然后服务器处于等待状态 第二步:运行LoginData.java 启动(客户端)登陆界面 输入用户名 ip为本机localhost 第三步:在登陆后的界面文本框输入文本,然后发送 可以同时启动...

Global site tag (gtag.js) - Google Analytics