在 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 实例的集群,并且该线程在两个实例上运行。我正在尝试实现不同的行为。
我想要达到的目标:
- 该线程当时应该只在一个实例上运行。
- 如果第一个实例失败(在哪个线程上运行),则应在第二个实例上启动线程。
我会很感激任何提示。
我的应用程序逻辑是什么?
线程执行的应用程序逻辑如下:
- 从数据库中读取某事。
- 分析数据库信息。
- 如果需要,向外部系统发出 HTTP 请求。
- 再睡眠线程 10 分钟。
关键是:如果我有 2 个 tomcat 实例,只有一个应该执行这个逻辑