Java-Cron作业-如果一个实例触发了批处理作业,请防止其他实例执行此操作

问题描述 投票:1回答:1

我有一个在两个实例上运行的应用程序,并且实例之间的唯一通信是它们在单个数据库上运行。我的批处理作业很少。例如:将记录从数据库复制到文件,然后将文件传送到服务器。由于这两个实例都有一个通用的数据库,因此我试图向表中写入已触发作业的信息。基本上,触发条件是给定表上不存在这样的记录。如何自动执行此操作,即检查尚未触发作业的表,然后插入表中?

java spring multithreading jpa atomicity
1个回答
0
投票

悲观锁定在这里可以提供帮助:

  • 创建具有上次执行时间的锁定记录的专用表
  • 在计划执行中,获取锁定记录(通过EntityManager注入的LockModeType.PESSIMISTIC_WRITE获得>
  • 检查锁定记录的执行时间:如果它是最近更新的,则该作业必须已经在另一个实例上运行过
  • 否则,执行作业,然后更新锁定记录上的最后执行时间。
  • 请参见Lock Modes (Java EE Tutorial)以获取更多详细信息。

© www.soinside.com 2019 - 2024. All rights reserved.