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;  
  2.   
  3. import javax.servlet.*;  
  4. import javax.servlet.http.*;  
  5. import com.derek.pub.TimerManager;  
  6. /** 
  7.  * 启动定时器的监听器 
  8.  * @author derek 
  9.  * @version 1.0 
  10.  */  
  11. public class TimerListener extends HttpServlet implements  
  12.         ServletContextListener {  
  13.     private TimerManager tm = null;  
  14.     //Notification that the web module is ready to process requests  
  15.     public void contextInitialized(ServletContextEvent sce) {  
  16.       int day,hour,min,sec;        
  17.       day = 26; hour = 16; min = 42; sec = 0;       
  18.       tm = new TimerManager(day,hour,min,sec);  
  19.     }  
  20.   
  21.     //Notification that the servlet context is about to be shut down  
  22.     public void contextDestroyed(ServletContextEvent sce) {  
  23.        tm.destoryTimer();  
  24.     }  
  25. }  
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代码
  1. package com.derek.pub;  
  2.   
  3. import java.util.Timer;  
  4. import java.util.Date;  
  5. import java.util.Calendar;  
  6.   
  7. /** 
  8.  * 定时器 
  9.  * @author derek 
  10.  * @version 1.0 
  11.  */  
  12. public class TimerManager {  
  13.     Timer t = null;  
  14.     public TimerManager(int day,int hour,int min,int sec) {  
  15.         time(day,hour,min,sec);  
  16.     }  
  17.    
  18.     public void time(int day,int hour,int min,int sec){      
  19.     Calendar c = Calendar.getInstance();  
  20.     c.set(Calendar.DAY_OF_MONTH,day);  
  21.     c.set(Calendar.HOUR_OF_DAY,hour);  
  22.     c.set(Calendar.MINUTE,min);  
  23.     c.set(Calendar.SECOND,sec);  
  24.     Date date = c.getTime();  
  25.     System.out.println(c.getTime());  
  26.     t= new Timer();  
  27.     MyTask mt = new MyTask();  
  28.     t.schedule(mt,date);  
  29.     }  
  30.     public void destoryTimer(){  
  31.     t.cancel();  
  32.     }  
  33. }   

 

 

Java代码
  1. package com.derek.pub;  
  2. import java.util.TimerTask;  
  3. /** 
  4.  * 计划任务代码 
  5.  * @author derek 
  6.  * @version 1.0 
  7.  */  
  8. public class MyTask extends TimerTask{  
  9.     public MyTask() {  
  10.     }  
  11.     /** 
  12.      * 任务块 
  13.      */  
  14.     public void run() {  
  15.         System.out.println("定时器RUN");  
  16.     }  
  17. }  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值