起因:今天在加上mybatis二级缓存的时候,发现update delete方法都无法刷新缓存,仔细查了一下,网上很多方法都没有用,然后突然想到@Transactional和二级缓存会有冲突,于是我把事务去掉,发现刷新缓存生效
再仔细排查了一下,发现是事务生命周期造成的,将supports改成required,就可以解决了
解决方法:
生命周期详解:
required:方法A调用调用时,没有事务新建一个事务,当在方法A调用另外一个方法B的时候,方法B将使用相同的事务,;如果方法B发生异常需要数据回滚的时候,整个事务数据回滚。
requried_new:对于方法A和方法B在被调用的时候,无论是否有事务,都将开启一个新的事务,如果方法A有异常,方法B的数据不会回滚。
supports:方法调用的时候,有事务就调用事务,没有事物就不使用事物。
no_supports:强制方法不在事务中执行,如有事务,在方法调用的到结束阶段事务将被挂起。
never:强制方法不在事务中执行,如有事务则抛出事务、
mandatory:强制方法在事务中执行,若无事务将抛出异常。
具体原因,要深入源码去找,后面有时间会继续写…