Spring事务失效的场景

异常捕获处理

在方法中通过异常捕获将异常处理掉了

就不会触发异常回滚

如果需要捕获的同时进行事务管理

可以在catch块中进行手动抛出异常

抛出检查异常

在方法上抛出检查异常

但Spring默认只会回滚Runtime异常

需要在@Transactional注解中设置rollbackfor=需要回滚的异常

非public方法(或使用final修饰)

因为Spring事务使用AOP实现

无论是CGLIB的继承代理

还是动态代理的接口代理都无法代理非public方法

方法的内部调用

因为内部调用使用this对象调用

并没有使用代理对象,不会走AOP被代理

需要注入自己解决

没有被Spring管理

多线程调用

Spring的事务是通过连接数据库实现

如果不在同一个线程内,那数据库的连接自然也不是一个

编程式事务

通过transactionTemplate.execute()方法控制事务

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部