使用MongoDB进行乐观锁定重试

本文介绍了如何在MongoDB中利用乐观锁定进行重试操作,通过Spring AOP支持创建自动重试机制。文章展示了如何定义Retry注解,并将其应用于业务逻辑方法,当遇到乐观锁定异常时进行重试。文中还提到了一个测试场景,10个并发竞标尝试保存产品,并提供了GitHub上的代码示例。
摘要由CSDN通过智能技术生成

在我以前的文章中,我谈到了对MongoDB批处理程序采用乐观锁定的好处。 如我之前所写,乐观锁异常是可恢复的异常,只要我们获取最新的Entity,我们就会对其进行更新并保存。

因为我们使用的是MongoDB,所以我们不必担心本地或XA事务。 在以后的文章中,我将演示如何使用JPA构建相同的机制。

Spring框架提供了很好的AOP支持,因此可以轻松实现自动重试机制,这就是我的方法。

我们首先定义一个Retry注释:

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface Retry {

    Class<? extends Exception>[] on();

    int times() default 1;
}

我们注释了我们的业务逻辑方法,例如

@Retry(times = 10, on = org.springframework.dao.OptimisticLockingFailureException.class)
public Product updateName(Long id, String name) {
	Product product = productRepository.findOne(id);
	product.setName(name);
	LOGGER.info("Updating product {} name to {}", product, name);
	return productRepository.save(product);
}

然后,我们只需要AOP方面来拦截业务逻辑调用,并在乐观锁定检测的情况下重试。

@Aspect
public class OptimisticConcurrencyControlAspect {

    private static final Logger LOGGER = LoggerFactory.getLogger(OptimisticConcurrencyControlAspect.class);

    @Around("@annotation(vladmihalcea.concurrent.Retry)")
    public Object retry(ProceedingJoinPoint pjp
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值