Java 在集群环境中避免Spring批处理作业中的并发

Java 在集群环境中避免Spring批处理作业中的并发,java,spring,concurrency,jboss,Java,Spring,Concurrency,Jboss,我希望确保Spring作业在运行时不会再次启动。这在单个JVM环境中是微不足道的 然而,我如何在集群环境中实现这一点(更具体地说,在JBoss5.1中——我知道有点过时;如果有针对更高版本的解决方案,我也会感兴趣) 因此,它应该是一种跨越所有集群节点的单例模式 我正在考虑使用数据库锁或消息队列。有更简单/性能更好的解决方案吗?您需要同步彼此一无所知的线程,因此最简单的方法是在公共位置共享一些信息。有效的替代方案包括: 共享数据库 共享文件 保存批处理状态的外部web服务 如果您喜欢使用共享数

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

然而,我如何在集群环境中实现这一点(更具体地说,在JBoss5.1中——我知道有点过时;如果有针对更高版本的解决方案,我也会感兴趣)

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


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

您需要同步彼此一无所知的线程,因此最简单的方法是在公共位置共享一些信息。有效的替代方案包括:

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

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

您需要同步彼此一无所知的线程,因此最简单的方法是在公共位置共享一些信息。有效的替代方案包括:

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

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

这太晚了,但用于将来的查找:spring batch使用jpa存储库来同步作业,因此可以避免并发。

这太晚了,但用于将来的查找:spring batch使用jpa存储库来同步作业,因此,您可以避免并发。

您可以在before步骤中添加一个作业侦听器并在其中使用以查找所有作业。如果有多个正在运行-抛出异常并退出作业。

您可以在before步骤中添加作业侦听器并在其中使用以查找所有作业。如果有多个正在运行-抛出异常并退出作业。

非常感谢-这证实了我的怀疑,即没有固有的特定于群集的同步机制。感谢您指出Redis——我将对此进行研究。非常感谢您——这证实了我的怀疑,即不存在固有的特定于集群的同步机制。谢谢你指出Redis——我会调查一下。当你提到春季工作意味着什么样的工作?这些是春季批处理作业吗?是的,春季批处理作业。当你提到春季批处理作业意味着什么样的作业时,请参阅下面的答案?这些是spring批处理作业吗?是的,spring批处理作业。请参阅下面的答案