乐观锁定的重试机制(弹簧数据+ JPA)

我们决定在我们的Web应用程序中使用乐观锁定,以便增加并发性并且不使用悲观锁定。

我们现在正在寻找重试解决方案。

我们希望对我们当前的代码库产生尽可能小的影响。

我们在Web上看到的解决方案之一是使用带注释的重试拦截器将方法标记为可重试。

问题是我们想要注释对它们有@Transactional注释的方法,但拦截器由于某种原因无法重试它们。 (拦截器完美地重试非事务性方法。)

所以:

1)重试的替代方案对我们的代码影响最小吗?

2)该解决方案是否有任何文档\教程?

3)是否可以重试@Transactional注释方法?

干杯!

您有两种方法可以实现此目的,如下所示

从hibernate乐观锁定exception中恢复

要么

使用Spring AOP重试失败的幂等并发操作

希望对你有帮助..!

广告3。

当版本号或时间戳检查失败时(发生乐观锁定),您可以使用Spring Retry重试事务处理方法。

组态

@Configuration @EnableRetry public class RetryConfig { } 

用法

 @Retryable(StaleStateException.class) @Transactional public void doSomethingWithFoo(Long fooId){ // read your entity again before changes! Foo foo = fooRepository.findOne(fooId); foo.setStatus(REJECTED) // <- sample foo modification } // commit on method end 

使用@Transational(propagation = REQUIRED_NEW)仅重试注释方法中的代码。