JDK 定时器和 Quartz 展示(3)

4. 在Spring 中使用JDK 自带的定时任务 4.1 创建一个简单的任务

下面的MyTask.java 是个简单的可以执行的任务

MyTask.java

package com.javacodegeeks.snippets.enterprise;

public class MyTask {
 public void sayHello() {
  System.out.println("Hello !!! ");
 }
}

4.2 在applicationContext.xml中配置Scheduler和Timer

Spring 使用自己实现的Task取代了JDK中的TimerTask,Spring的Task是可以被定时调用或者通过Timer来重复调用的,它就是org.springframework.scheduling.timer.MethodInvokingTimerTaskFactoryBean。它也提供了对于JDK Timer的一个实现,它是一个后台线程用来调度任务的工具类,这个类就是org.springframework.scheduling.timer.ScheduledTimerTask。
另外,还定义了一个TimerFactoryBean, 来启动计划任务的执行. 它是一个工厂Bean,它设置了一个暴露给其他bean引用的Timer. 它允许注册ScheduledTimerTask,在容器启动的时候开启Timer然后在容器销毁的时候将它取消。

需要执行计划任务的时候,我们需要做的就是在applicationContext.xml文件中定义上面所有提到过的类. 我们在myTask bean中指定MyTask.java类. 我们也需要定义schedulerBean, 它引用TimerTask类. 它有两个属性需要配置. targetObject的值引用我们自己实现的任务bean,也就是myTask. targetMethod属性的值是需要被计划执行的任务方法.

timerTask这个bean是个Timer类型的bean。它有一个timerTask属性,我们可以通过它设置对上面定义好的名为timerTask的bean的引用。这里我们可以使用delay参数来配置第一次开始任务前的延时时间,单位是毫秒。我们也可以使用period参数来设置重复执行任务之间的间隔,单位也是毫秒。我们把它配置成每5秒钟执行一次,首次延时1秒钟。

TimerFactoryBean也定义在applicationContext.xml中。我们可以使用FactoryBean创建的Timer通过scheduledTimerTask参数,来注册一系列ScheduledTimerTask对象。这里,我们注册了定义好的timerTask。

applicationContext.xml

<beans xmlns="http://www.springframework.org/schema/beans"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
 xmlns:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context"
 xmlns:jee="http://www.springframework.org/schema/jee" xmlns:tx="http://www.springframework.org/schema/tx"
 xmlns:task="http://www.springframework.org/schema/task"
 xsi:schemaLocation="http://www.springframework.org/schema/aop http://www.springframework.org/schema/beans http://www.springframework.org/schema/context http://www.springframework.org/schema/jee http://www.springframework.org/schema/tx http://www.springframework.org/schema/task ">


 <bean />
 
 <bean
 >
 <property ref="myTask" />
 <property value="sayHello" />
</bean>

<bean
 class="org.springframework.scheduling.timer.ScheduledTimerTask">
 <property ref="schedulerTask" />
 <property value="1000" />
 <property value="5000" />
</bean>

<bean>
 <property>
  <list>
   <ref local="timerTask" />
  </list>
 </property>
</bean>
</beans>

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/ccca22d81f838e2db903c6c2089db677.html