@Transaction如何通过多个线程进行更新

拉姆·普拉卡什

我已经面对这个问题已有一段时间了。

@Service
public class SomeService{

   @Autowired
   private Repo repo;

   @Transactional
   public void update(int id){
     repo.findById(id).ifPresent(entity -> entity.setName(entity.getName() + "-name"));
   }

}

我的问题是-通常2个不同的线程传递相同的ID来更新实体。我只看到实体中的最新更新。

那是 -

entity.getName()默认情况下将返回some预期的结果是-some-name-name但我最终看到的是some-name

问题似乎是findbyId由2个不同的线程同时执行,并使该实体处于此状态。

如何处理呢?

相互依赖

您应该对重试使用乐观锁定,以确保两个更新都最终提交。

看一下这个问题:Spring Optimistic Locking:如何在提交成功之前重试事务方法

关键是使用Spring Retry并捕获乐观锁定异常。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章