java - 避免集群环境中 Spring Batch 作业的并发

标签 java spring concurrency jboss

我想确保 Spring 作业在仍在运行时不会再次启动。这在单个 JVM 环境中是微不足道的。

但是,我如何在集群环境中实现这一点(更具体地说,在 JBoss 5.1 中 - 我知道有点过时;如果后续版本存在解决方案,我也会对这些感兴趣)。

因此,它应该是一种跨所有集群节点的单例模式。

我正在考虑使用数据库锁或消息队列。有没有更简单/性能更好的解决方案?

最佳答案

您需要同步彼此互不了解的线程,因此最简单的方法是在公共(public)位置共享一些信息。有效的替代方案是:

  • 共享数据库
  • 共享文件
  • 保存批处理状态的外部 Web 服务

如果您更喜欢使用共享数据库,请尝试使用类似 Redis 的数据库来提高你的表现。它是一个内存数据库,在磁盘上具有持久性,因此访问批处理过程的状态应该足够快。

关于java - 避免集群环境中 Spring Batch 作业的并发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39617054/

相关文章:

Java 堆空间不足,无法在 AWS S3 上上传文件

java - Spring @RequestBody : the request sent by the client was syntactically incorrect

java - Prometheus Java 摘要指标是线程安全的吗?

java - -Dcom.ibm.mq.cfg.useIBMCipherMappings=false 不工作并获取 MQRC_UNSUPPORTED_CIPHER_SUITE

java - 将旧的线程池代码升级到新的并发类

java - 如何与 Selenium Grid 同时运行浏览器以搜索部分字符串列表(在 Java 中)

java - 如何创建内存中的 JarFile?

java - 配置 log4j 显示错误

java - 在 Intent 选择器中重新排序应用程序

java - java.util.concurrent.RecursiveTask 如何工作?