关于Java Web 使用Java的TimerTask, 触发定时器(执行某些任务)的实例

来源:互联网 发布:英美留学对比 知乎 编辑:程序博客网 时间:2024/05/18 01:31
import java.util.TimerTask;import javax.servlet.ServletContext;import javax.servlet.ServletContextEvent;import javax.servlet.ServletContextListener;

public class MainAction implements ServletContextListener {
/** * 上下文监听器,需要在web.xml中进行配置,<listener>packageAddress.Class</listener> * Create by 2017/08/17 * * @author Jmlc *///现在项目中用到需要定时去检查文件是否更新的功能。timer正好用于此处,写一个timertask的子类即可(timertask就是实现了runnable接口)。private Timer timer = null;//(获取容器的实例)servlet 会有几个周期,当你启动服务时,发出请求调用某个servlet时,就会对该Servlet进行初始化,即init方法,// 然后开始处理请求,在这当中就出现一个servletContext,这个是一个暂时存放数据的地方,上下文关系。通过getServletContext方法得到。private ServletContext context = null;//第一步:上下文初始化(init)public void contextInitialized(ServletContextEvent event) {    this.context = event.getServletContext();    timer = new Timer(true);    event.getServletContext().log("定时器已启动......");    //第一个参数是要操作的方法,第二个参数是要设定延迟的时间(0表示即刻执行),第三个参数是周期的设定,每隔多长时间执行该操作(每5秒执行一次)。    timer.schedule(new TimingTasks(this.context), 0, 5 * 1000);    event.getServletContext().log("已执行邮件发送任务......");}//第?步:上下文销毁public void contextDestroyed(ServletContextEvent event) {    timer.cancel();    this.context.log("定时器销毁......");    this.context = null;}//定时任务(邮件发送任务)private static class TimingTasks extends TimerTask {    private static boolean isRunning = false;    private ServletContext context = null;    public TimingTasks(ServletContext context) {        this.context = context;    }    //下面的方法会按之前设定的每5秒执行一次,所以,此处不需要循环    int number = 1;//记录执行次数,默认1次    public void run() {        if (!isRunning) {            isRunning = true;            context.log("开始执行指定任务......");            int i = 0;            while (i++ < 2) {                context.log("已完成任务的" + i + "/" + 2);            }            isRunning = false;            context.log("指定任务执行结束......");            context.log("已指定完成任务,第" + number++ + "次。");        } else {            context.log("上一次任务执行还未结束......");        }    }  }
}
<!--(...的任务).监听器--><listener>   <listener-class>com.jandar.frame.system.web.MainAction</listener-class></listener>

上述:<listener-class>包路径.Class类</listener-class>即可(相当于配置找到你需要执行任务的类(Class))。
阅读全文
0 0
原创粉丝点击