我们在编写程序时,经常会用到定时调度任务的问题,比如,每经过5分钟执行某个操作,其实很简单,只要使用上监听器就可以,当服务已启动的时候,就会自动执行调度任务,下面详细为大家说下简单的使用方法。
1.编写自己的调度任务。
package com.yjd.listener;
import java.util.TimerTask;
import javax.servlet.ServletContext;
public class MyTask extends TimerTask {
private static boolean isRunning = false;
private ServletContext context = null;
public MyTask(ServletContext context) {
this.context = context;
}
@Override
public void run() {
if (!isRunning) {
context.log("开始执行指定任务 ");
isRunning = false;
// 你自己要执行的动作。。。
System.out.println("-------------------------------------");
context.log("指定任务执行结束 ");
} else {
context.log("上一次任务执行还未结束 ");
}
}
}
2.写一个ServletContextListener监听器。
package com.yjd.listener;
import java.util.Timer;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
public class ContextListener implements ServletContextListener {
private Timer timer = null;
public void contextDestroyed(ServletContextEvent event) {
timer.cancel();
event.getServletContext().log("定时器销毁 ");
}
public void contextInitialized(ServletContextEvent event) {
timer = new Timer(true);
event.getServletContext().log("定时器已启动");
/**
* 每1秒(即1*1000毫秒)被触发一次,中间参数0表示无延迟
* 第二个参数"0"的意思是:(0就表示无延迟) 当你调用该方法后,该方法必然会调用 TimerTask 类 TimerTask 类 中的
* run() 方法, 这个参数就是这两者之间的差值,转换成汉语的意思就是说,用户调用 schedule()
* 方法后,要等待这么长的时间才可以第一次执行 run() 方法。
* 又如:每隔一个小时执行任务 timer.schedule(TimerTask, 0, 60 * 60 * 1000);
*
**/
timer.schedule(new MyTask(event.getServletContext()), 0, 1 * 1000);
event.getServletContext().log("已经添加任务调度表 ");
}
}
3.在配置文件中注册监听器。
<listener>
<listener-class>com.yjd.listener.ContextListener</listener-class>
</listener>