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了。
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();
    }
}
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();
    }
}
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 " );
    }
}

你可能感兴趣的:(WEB定时器-Timer)