我在contextInitialized里面,使用timer定时器,发现这个contextInitialized会启动两次,后来经过仔细观察,发现是因为tomcat里面,我配置了两个网站,后来去掉一个后,contextInitialized就只运行一次了但是这是在本地,传到服务器的时候,服务器上可是有近10个网站的,我该怎么办呢?请大家给个解决办法也不一定是要解决contextInitialized启动两次,因为我的主要目的,是以固定的时间,对数据进行更新基本代码如下:
public class ContextListener extends HttpServlet implements
ServletContextListener
{
public ContextListener()
{
} private java.util.Timer timer = null; public void contextInitialized(ServletContextEvent event)
{
timer = new java.util.Timer(true);
timer.schedule(new MyTask(event.getServletContext()), 0, 5000);
} public void contextDestroyed(ServletContextEvent event)
{
timer.cancel();
}
}

解决方案 »

  1.   

    以固定的时间,对数据进行更新??你是否应该脱离开什么Context,建议你用一个单独的应用程序,而不是一个web程序去更新你的数据呢!?做一个小的app,单独运行,又不需要什么图形化界面。 而且还可以做成服务,自动启动。
      

  2.   

    我提示一句吧。
    因为每个虚拟主机或者虚拟路径都有各自的CLASSPATH,所有就有各自的ClassLoader
    他们在这一层是各自独立的。
    你有10个站点,当然就各自启动各自的。如果你确认这10个站点却是运行在1个机器上,你可以用一种比较卑鄙的方法来解决,我给你个思路,
    强行占用一个端口try{
     ServerSocket s = new ServerSocket(11111); // 强行占用,如果已经被其它站点占用了,则会跑出异常
     timer = new java.util.Timer(true);
      ...
    }catch(Exception ex){
     
    }这样就能保证虽然10个都启动了,但最后只有其中一个有效。
      

  3.   

    为什么不试试用spring的定时任务机制?