Springboot下myabtis update delete等无法刷新二级缓存

在整合MyBatis二级缓存与Spring事务管理时遇到问题,发现updatedelete方法无法刷新缓存。经排查,发现是由于@Transactional与缓存配置的生命周期不匹配导致。通过调整事务管理器的 propagation 属性为 required,使得缓存更新正常工作。了解了required、required_new、supports等事务管理策略的区别,解决了问题。深入研究源码将有助于进一步理解这个问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

起因:今天在加上mybatis二级缓存的时候,发现update delete方法都无法刷新缓存,仔细查了一下,网上很多方法都没有用,然后突然想到@Transactional和二级缓存会有冲突,于是我把事务去掉,发现刷新缓存生效

在这里插入图片描述

再仔细排查了一下,发现是事务生命周期造成的,将supports改成required,就可以解决了

解决方法:
在这里插入图片描述

生命周期详解:

required:方法A调用调用时,没有事务新建一个事务,当在方法A调用另外一个方法B的时候,方法B将使用相同的事务,;如果方法B发生异常需要数据回滚的时候,整个事务数据回滚。

requried_new:对于方法A和方法B在被调用的时候,无论是否有事务,都将开启一个新的事务,如果方法A有异常,方法B的数据不会回滚。

supports:方法调用的时候,有事务就调用事务,没有事物就不使用事物。

no_supports:强制方法不在事务中执行,如有事务,在方法调用的到结束阶段事务将被挂起。

never:强制方法不在事务中执行,如有事务则抛出事务、

mandatory:强制方法在事务中执行,若无事务将抛出异常。

具体原因,要深入源码去找,后面有时间会继续写…

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值