Tomcat Cluster 6和ContextListener

时间:2012-06-29 07:53:43

标签: java tomcat replication cluster-computing


在Tomcat的单个实例上,我有一个在初始化上下文时启动的线程。这样的事情:

public class MyContextListener implements ServletContextListener {
private MyThread thread = null;

@Override
public void contextInitialized(ServletContextEvent sce) {
    //Start thread...
}

@Override
public void contextDestroyed(ServletContextEvent sce) {
    //Stop thread...
}
}

这个线程每10分钟在系统中执行一些重要的工作,并且工作正常。

现在我已经切换到tomcat实例的集群,这个线程在两个实例上运行。我正在努力实现不同的行为。

我想要实现的目标:

  • 此线程当时应仅在一个实例上运行。
  • 如果第一个实例失败(在哪个线程上运行),则应在第二个实例上启动线程。

我会感激任何提示。

我的应用逻辑是什么?
由线程执行的应用程序逻辑如下:

  1. 从DB中读取......
  2. 分析数据库信息。
  3. 如果需要,向外部系统发出HTTP请求。
  4. 再睡10分钟。
  5. 关键是:如果我有2个tomcat实例,只有一个应该执行这个逻辑

1 个答案:

答案 0 :(得分:0)

如果我理解正确,在使用Web应用程序服务器时,您实际上不允许在应用程序中启动新线程。所有线程必须由应用程序服务器管理。