任务调度的再探索-在spring中使用TimerTask

刚才在java分类中写过一篇JDK中的Timer和TimerTask实现任务调度的文章,在《spring2.0宝典》中提到在Spring中用Timer实现任务调度,省去了调度任务类的编写,而将任务调度配置在spring的配置文件中,实现类为org.springframework.scheduling.timer.ScheduledTimerTask。

    经过spring的包装后,不但省去了任务调度类的编写,而且采用配置方式,修改方便。So good~

    以下的例子很简单,只是实现定时将nameList中的名字打出来,具体采用时可根据业务修改,在此只做使用掩饰之用。

    一. Timer任务类代码如下:

  

import java.util.*;

public class CheckNames extends TimerTask
...{
    private List nameList;
  
    public void setNameList(List nameList)
    ...{
        this.nameList = nameList;
    }
  
    public void run()
    ...{
        for (Iterator it = nameList.iterator(); it.hasNext(); )
        ...{
            System.out.println(it.next());
        }      
    }
}   

     二.  spring的完整配置文件如下:

  

<?xml version="1.0" encoding="gb2312"?>

<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" 
    "http://www.springframework.org/dtd/spring-beans.dtd">

<beans>
    <!--  定义一个任务bean,它必须继承TimerTask-->
    <bean id="checkName" class="CheckNames">
      <property name="nameList">
        <list>
          <value>Amigo Xie</value>
          <value>Xie Xing xing</value>
        </list>
      </property>
    </bean>

    <!-- 将目标任务包装成可调度任务-->
    <bean id="scheduledTask" class="org.springframework.scheduling.timer.ScheduledTimerTask">
        <!-- 配置任务调度任务的延迟时间-->
        <property name="delay">
            <value>1000</value>
        </property>
        <!-- 配置两次任务调度之间的时间间隔-->
        <property name="period">
            <value>2000</value>
        </property>
        <!-- 确定任务调度的目标任务-->
        <property name="timerTask">
            <ref local="checkName"/>
        </property>
    </bean>

    <bean id="timerFactory" class="org.springframework.scheduling.timer.TimerFactoryBean">
        <property name="scheduledTimerTasks">
            <!-- 下面用于配置一系列的任务调度-->
            <list>
                <ref local="scheduledTask"/>
            </list>
        </property>
        <!-- 设置该任务调度器是否为后台线程,设置为false表示不是后台线程-->
        <property name="daemon">
            <value>false</value>
        </property>
    </bean>

</beans>

     三. 测试类

    可写一个测试类,在该测试类的main方法中加入如下语句;

    ApplicationContext ctx = new FileSystemXmlApplicationContext("bean.xml");

    通过该语句创建了ApplicationContext 实例,但程序不会中止,因为启动了任务调度

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/amigoxie/archive/2006/12/24/1458291.aspx

猜你喜欢

转载自zhangshuwen5251-163-com.iteye.com/blog/1111327