小弟目前在做一个监测系统,需要从解调仪不断地读取数据存入数据库,开发的时候是一个单独的main程序,现在想部署成,tomcat启动时,就运行,tomcat关闭时,这个函数也就随之关闭。我理解的struts2都是action出发的,这样一个需要一直运行的函数不知该放在哪里,怎么部署...求赐教

解决方案 »

  1.   

    写个监听器,一段时间执行一次就行了,struts2不可能一直在执行的
      

  2.   

    或者把他写到你的baseAction中,不管运行哪个方法,你都运行一下这个方法,
      

  3.   


    写listener配置在web.xml<listener>
    <listener-class>com.shadow.system.listener.InitTimer</listener-class>
    </listener>然后写执行任务package com.shadow.system.listener;import java.io.IOException;
    import java.util.Timer;import javax.servlet.ServletContextEvent;
    import javax.servlet.ServletContextListener;
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;import org.apache.log4j.Logger;import com.shadow.mvc.task.OrderTask;
    /**
     * 定时器作业
     * 
     * @author shadow
     * @email [email protected]
     * @create 2012.04.28
     */
    @SuppressWarnings("serial")
    public class InitTimer extends HttpServlet implements ServletContextListener { protected Logger logger = Logger.getLogger(getClass()); public InitTimer() {
    // do something
    } private Timer timer = null; // 时间器 private final long INTERVAL_TIME = 600000; // 执行间隔(毫秒) protected void doGet(HttpServletRequest req, HttpServletResponse resp)
    throws ServletException, IOException {
    this.doPost(req, resp);
    } protected void doPost(HttpServletRequest req, HttpServletResponse resp)
    throws ServletException, IOException {
    } public void contextDestroyed(ServletContextEvent event) {
    timer.cancel();
    event.getServletContext().log("定时器销毁");
    } public void contextInitialized(ServletContextEvent event) {
    timer = new Timer(true);
    event.getServletContext().log("定时器启动");
    timer.schedule(new OrderTask(event.getServletContext()), 0,
    INTERVAL_TIME);
    event.getServletContext().log("添加到任务调度表");
    }}
      

  4.   

    去了解下Quartz,用个定时器,可以配置间隔时间
      

  5.   

    很受用,如果我在initialized调用一个死循环的函数会不会就进行不下去了?监听器init函数xie