Web定时器 - Timer

Web定时器 - Timer


   Java定时器(java.util.Timer)有定时触发计划任务的功能,通过配置定时器的间隔时间,在某一间隔时间段之后会自动有规律的调用预先所 安排的计划任务(java.util.TimerTask)。另外,由于我们希望当Web工程启动时,定时器能自动开始计时,在整个Web工程的生命期 里,定时器能在每晚深夜触发一次报表计算引擎。因此定时器的存放位置也值得考查,不能简单的存在于单个Servlet或JavaBean中,必须能让定时 器宿主的存活期为整个Web工程生命期,在工程启动时能自动加载运行。结合这两点,跟Servlet上下文有关的侦听器就最合适不过了,通过在工程的配置 文件中加以合理配置,会在工程启动时自动运行,并在整个工程生命期中处于监听状态。

   下面就Servlet侦听器结合Java 定时器来讲述整个实现过程。要运用Servlet侦听器需要实现javax.servlet.ServletContextListener接口,同时实 现它的contextInitialized(ServletContextEvent    event)和contextDestroyed(ServletContextEvent    event)两个接口函数。考虑定时器有个建立和销毁的过程,看了前面两个接口函数,就不容置疑的把建立的过程置入 contextInitialized,把销毁的过程置入contextDestroyed了。
    java 代码 1

package com.derek.servlet;       
import javax.servlet.*;    
import javax.servlet.http.*;    
import com.derek.pub.TimerManager;    
/**    
  * 启动定时器的监听器    
  * @author derek    * @version 1.0    
 **/  

public class TimerListener extends HttpServlet implements           ServletContextListener {
    private TimerManager tm = null;
        //Notification that the web module is ready to process requests
    public void contextInitialized(ServletContextEvent sce) {
        int day,hour,min,sec;
        day = 26; hour = 16; min = 42; sec = 0;          
        tm = new TimerManager(day,hour,min,sec);
     }           
   //Notification that the servlet context is about to be shut down
    public void contextDestroyed(ServletContextEvent sce){ tm.destoryTimer();       
   }    
}   


java 代码 2
package com.derek.pub;       
import java.util.Timer;    
import java.util.Date;    
import java.util.Calendar;       
/**    
  * 定时器    
  * @author derek    
  * @version 1.0    
  */   
public class TimerManager { 
    Timer t = null;         
    public TimerManager(int day,int hour,int min,int sec) {           
         time(day,hour,min,sec);       
    }  
           
    public void time(int day,int hour,int min,int sec){               
 
     Calendar c = Calendar.getInstance();
     c.set(Calendar.DAY_OF_MONTH,day);
     c.set(Calendar.HOUR_OF_DAY,hour);        
     c.set(Calendar.MINUTE,min);
     c.set(Calendar.SECOND,sec);        
     Date date = c.getTime();        
     System.out.println(c.getTime());        
     t= new Timer();        
     MyTask mt = new MyTask();        
     t.schedule(mt,date);        
    }        

    public void destoryTimer(){
        t.cancel();        
    }    
}  

java 代码 3

package com.derek.pub;    
import java.util.TimerTask;    
/**    
  * 计划任务代码 
  * @author derek   
  * @version 1.0   
  */   
public class MyTask extends TimerTask{       
   public MyTask() {       
   }       

 /**      
  * 任务块      
  */      

 public void run() { 
    System.out.println("定时器RUN"); 
  }   
} 

你可能感兴趣的:(java,C++,c,Web,servlet)