当前位置: 代码迷 >> Web前端 >> [转载]在Tomcat器皿的Web Application中实现计划任务
  详细解决方案

[转载]在Tomcat器皿的Web Application中实现计划任务

热度:381   发布时间:2012-09-02 21:00:34.0
[转载]在Tomcat容器的Web Application中实现计划任务
在Resin中做传统计划任务到Web形式的转换是件特简单的事情,因为Resin的配置文件支持Run-at标签,可以象crontab那样,定时地、周期地去调用指定的Servlet。
而在Tomcat中事情变得稍微复杂了一点点。现在假设我们需要一个每隔一个星期自动清除旧数据的程序,整个程序可以划分为3部分:
ContextListener.java: javax.servlet.ServletContextListener的实现;
CleanDataTask.java: java.util.TimerTask的实现;
CleanData.java: 具体业务逻辑(数据清除行为)的实现;

ContextListener.java

package com.hosine.tschedule;

import javax.servlet.*;

public class ContextListener implements javax.servlet.ServletContextListener {
    private java.util.Timer timer = null;

    public void contextInitialized(ServletContextEvent event) {
        timer = new java.util.Timer(true);
        event.getServletContext().log("timer is running...");
        timer.schedule(new CleanDataTask(event.getServletContext()), 0,
                60 * 60 * 1000 * 24 * 7);
        event.getServletContext().log("task has been added...");
    }

    public void contextDestroyed(ServletContextEvent event) {
        timer.cancel();
        event.getServletContext().log("destroy timer...");
    }
}


CleanDataTask.java

package com.hosine.tschedule;

import java.util.TimerTask;

public class CleanDataTask extends TimerTask {
   
    String webappRoot = "";
   
    public CleanDataTask(javax.servlet.ServletContext context){
        webappRoot = context.getRealPath("/");
    }

    public void run() {           
        CleanData.setWebappRoot(webappRoot);
        CleanData.cleanFileData();
        CleanData.cleanDbSourceData();      
    }
}


CleanData.java

package com.hosine.tschedule;

public class CleanData {

    private static String webappRoot = "";
   
    protected static void setWebappRoot(String webappRootPath){
        webappRoot = webappRootPath;
    }
   
    protected static void cleanFileData(){
        System.out.println("clean file data");
    }
   
    protected static void cleanDbSourceData(){
        System.out.println("clean db data");
    }
   
}


最后一步就是在Web Application的web.xml配置文件添加ContextListener的配置信息:
    <!-- clean old data every week  -->
    <listener>
    <listener-class>com.hosine.tschedule.ContextListener</listener-class>
    </listener>
  相关解决方案