Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何避免两个计划作业冲突导致ObjectOptimisticLockingFailureException_Java_Spring_Hibernate_Jpa_Spring Data Jpa - Fatal编程技术网

Java 如何避免两个计划作业冲突导致ObjectOptimisticLockingFailureException

Java 如何避免两个计划作业冲突导致ObjectOptimisticLockingFailureException,java,spring,hibernate,jpa,spring-data-jpa,Java,Spring,Hibernate,Jpa,Spring Data Jpa,我有两个不同的定时cron作业,每15分钟运行一次,并在60秒内完成作业。两者作用于同一个实体:读取然后处理,然后使用JpaRepository保存方法保存该实体,导致以下错误 org.springframework.orm.ObjectOptimisticLockingFailureException: Object of class [nl.coin.comp.domain.ServiceProvider] with identifier [105]: optimistic locking

我有两个不同的定时cron作业,每15分钟运行一次,并在60秒内完成作业。两者作用于同一个实体:读取然后处理,然后使用JpaRepository保存方法保存该实体,导致以下错误

org.springframework.orm.ObjectOptimisticLockingFailureException: Object of class [nl.coin.comp.domain.ServiceProvider] with identifier [105]: optimistic locking failed; nested exception is org.hibernate.StaleObjectStateException: Row was updated or deleted by another transaction (or unsaved-value mapping was incorrect) : [nl.coin.comp.domain.ServiceProvider#105]
作为解决方案,我希望避免两个作业之间的冲突。我想对两者使用@Scheduled(fixedelay)不同的固定延迟,但它们也可以重叠。
请帮我解决这个问题。

尝试使用悲观锁。在实体的事务中添加
选择更新
。第二个应等到事务1结束。

是否重试?这是乐观锁定失败时通常会执行的操作。感谢您的回复,但我不想重试,因为我的应用程序将在不同的节点上运行,并且具有相同的db,因此,如果1个节点的作业执行此任务,我可以处理此异常,但在同一个应用程序实例中,我希望避免两个作业之间的冲突。感谢您的帮助回复应用悲观锁将阻止应用程序的其他部分读取同一行。我正在考虑在两个作业之间应用具有共享锁的应用程序级同步块。因此,如果某个作业已获得锁,则其他作业将等待。我看到的唯一缺点是两个作业不会同时运行,一个会等待另一个完成。这是一个潜在的泄漏。假设您在不同的节点上运行这两个作业。我还建议为该实体引入某种身份。在开始作业后,将其设置为“正在进行”
,并让另一个作业等待,直到状态被释放。