[align=center][b]Web定时器 - Timer [/b][/align]
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
java 代码 2
java 代码 3
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");
}
}