contextInitialized启动多次的问题

varlj 2008-03-11 05:08:26
我在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();
}
}
...全文
650 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
铁衣 2010-11-11
  • 打赏
  • 举报
回复
为什么不试试用spring的定时任务机制?
老紫竹 2008-03-13
  • 打赏
  • 举报
回复
我提示一句吧。
因为每个虚拟主机或者虚拟路径都有各自的CLASSPATH,所有就有各自的ClassLoader
他们在这一层是各自独立的。
你有10个站点,当然就各自启动各自的。

如果你确认这10个站点却是运行在1个机器上,你可以用一种比较卑鄙的方法来解决,我给你个思路,
强行占用一个端口

try{
ServerSocket s = new ServerSocket(11111); // 强行占用,如果已经被其它站点占用了,则会跑出异常
timer = new java.util.Timer(true);
...
}catch(Exception ex){

}


这样就能保证虽然10个都启动了,但最后只有其中一个有效。
老紫竹 2008-03-12
  • 打赏
  • 举报
回复
以固定的时间,对数据进行更新??

你是否应该脱离开什么Context,建议你用一个单独的应用程序,而不是一个web程序去更新你的数据呢!?

做一个小的app,单独运行,又不需要什么图形化界面。 而且还可以做成服务,自动启动。
varlj 2008-03-12
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 java2000_net 的回复:]
以固定的时间,对数据进行更新??

你是否应该脱离开什么Context,建议你用一个单独的应用程序,而不是一个web程序去更新你的数据呢!?

做一个小的app,单独运行,又不需要什么图形化界面。 而且还可以做成服务,自动启动。
[/Quote]

我也想啊,老板不让…………
varlj 2008-03-12
  • 打赏
  • 举报
回复
奇怪,明明看到有两个回复,结果打开显示回复次数0

还没解决,大概帮忙啊,谢谢了
varlj 2008-03-11
  • 打赏
  • 举报
回复
没人帮我么?

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧