高并发锁事务重试机制(JPA高并发下的乐观锁异常)

本文介绍了在遇到JPA高并发场景下乐观锁异常的问题,提出了通过定义Aspectj拦截器来实现异常时的重试机制。详细讲解了如何定义切面接口、在Service接口方法上添加切面注解,以及创建Aspectj切面拦截器,确保在新的事务中重试直到达到预设的重试上限。同时,内容涵盖了AOP和Spring事务管理的相关知识。
摘要由CSDN通过智能技术生成

乐观锁:

model实体类加version字段

 


    @JsonProperty("_version")
    @Column(name = "version", nullable = false)
    @Version
    private Long version = 0L;

 

 

问题场景

 先在库里查询出该实体,转化为持久态,在这时库里的该数据被修改了,并且version发生变更,此时持久态实体进行save操作,会触发乐观锁异常。

 

1:解决方案

     定义Aspectj拦截器,指定方法发生乐观锁异常时,进行重试。

 

2:show coding.

 

(1) 因为不是所有方法发生乐观锁异常都是需要重试机制的,所以需要先定义切面接口定义IsTryAgain

/** 
 * 自定义尝试切面接口 
 */  
@Retention(RetentionPolicy.RUNTIME)  
public @interface IsTryAgain {  
    // marker annotation  
}  

 (2)Service接口方法加上切面接口定义

/** 
 * 并发乐观锁需要重试的方法 
 */  
@IsTryAgain  
boolean TryAgain
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值