`
tomEnjoy
  • 浏览: 142578 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

Java定时器

    博客分类:
  • java
阅读更多
2007年09月12日 星期三 下午 04:(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");
     }
}
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics