当前位置:编程学习 > JAVA >>

spring中集成TimerTask执行定时任务

Spring对Timer的支持的核心是由ScheduledTimerTask和TimerFactoryBean类组成的。 ScheduledTimerTask类是对TimerTask的包装器实现,这样你就可以为这个任务定义触发器信息。使用 TimerFactoryBean类,你可以让Spring使用配置创建触发器,并为一组指定的ScheduledTimerTask bean自动创建Timer实例。

1、自定义timerTask,比如:定时输出ServletContext中的信息,本例中输出项目的绝对路径(比如:D:\software\apache-tomcat-6.0.33\webapps\spring\)

Java代码  
public class BirthdayReminderTimerTask extends TimerTask implements ServletContextAware{  
  /*通过实现ServletContextAware可获得servletContext*/ 
  private ServletContext servletContext;  
  private static Logger logger = Logger.getLogger(BirthdayReminderTimerTask.class);  
  @Override 
  public void run() {  
//    logger.debug("BirthdayReminderTimerTask is running");  
    setServletContext(servletContext);  
    try {  
      System.out.println(this.servletContext.getRealPath("/"));  
    } catch (Exception e) {  
      e.printStackTrace();  
    }  
  }  
  public void setServletContext(ServletContext servletContext) {  
    this.servletContext = servletContext;      
  }  

public class BirthdayReminderTimerTask extends TimerTask implements ServletContextAware{
  /*通过实现ServletContextAware可获得servletContext*/
  private ServletContext servletContext;
  private static Logger logger = Logger.getLogger(BirthdayReminderTimerTask.class);
  @Override
  public void run() {
//    logger.debug("BirthdayReminderTimerTask is running");
    setServletContext(servletContext);
    try {
      System.out.println(this.servletContext.getRealPath("/"));
    } catch (Exception e) {
      e.printStackTrace();
    }
  }
  public void setServletContext(ServletContext servletContext) {
    this.servletContext = servletContext;   
  }
}
 2、在spring的bean配置文件中配置,当系统加载该文件时,配置的定时器将自动启动,同时被spring管理。

Xml代码  
<!--自定义任务-->      
    <bean id="birthdayReminder" class="com.jep.task.BirthdayReminderTimerTask"></bean>    
        
    <!-- ScheduledTimerTask类是对TimerTask的包装器实现,这样你就可以为这个任务定义触发器信息。 -->    
    <bean id="birthdayReminderTimerTask"    
        class="org.springframework.sche易做图ng.timer.ScheduledTimerTask">    
        <!-- 设置启动延迟 -->    
        <property name="delay">    
            <value>3000</value>    
        </property>    
        <!-- 后续延迟 -->    
        <property name="period">    
            <value>5000</value>    
        </property>    
        <!-- 指定触发器信息 -->    
        <property name="timerTask">    
            <ref local="birthdayReminder" />    
        </property>    
    </bean>    
        
    <!-- 使用TimerFactoryBean类,你可以让Spring使用配置创建触发器,并为一组指定的ScheduledTimerTask bean自动创建Timer实例。 -->    
    <bean id="timerFactory"    
        class="org.springframework.sche易做图ng.timer.TimerFactoryBean">    
        <property name="scheduledTimerTasks">    
            <list>    
                <ref local="birthdayReminderTimerTask" />                 
            </list>    
        </property>            
    </bean>   
    <!--自定义任务-->   
        <bean id="birthdayReminder" class="com.jep.task.BirthdayReminderTimerTask"></bean> 
         
        <!-- ScheduledTimerTask类是对TimerTask的包装器实现,这样你就可以为这个任务定义触发器信息。 --> 
        <bean id="birthdayReminderTimerTask" 
            class="org.springframework.sche易做图ng.timer.ScheduledTimerTask"> 
            <!-- 设置启动延迟 --> 
            <property name="delay"> 
                <value>3000</value> 
            </property> 
            <!-- 后续延迟 --> 
            <property name="period"> 
                <value>5000</value> 
            </property> 
            <!-- 指定触发器信息 --> 
            <property name="timerTask"> 
      &

补充:软件开发 , Java ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,