事务管理

问题

图片[1]-事务管理-深吸氧

我们一个Service中包含多个DAO操作,每个DAO中都有各自的事务管理。如果DAO1执行成功,DAO2执行失败回滚了,那么数据便会出现问题。

比如银行转账的例子:张三给李四转了100块钱,但是张三账户扣除100执行成功了,李四账户增加100出错回滚了,便会出现张三钱转出去了,李四没收到的情况。

事务前置

因此我们可以把事务管理前置到Filter中,当接收到请求后,首先会被Filter拦截,在Service中代码执行报错时,便能在Filter捕获到,并进行回滚。

但是要让DAO1、DAO2、DAO3处于同一个事物,这三个组件需要同一个Connection才行。

图片[2]-事务管理-深吸氧

代码

在前一篇学习过ThreadLocal,我们可以把Connection保存在ThreadLocal中,实现线程内共享。

图片[3]-事务管理-深吸氧

添加TransactionManager

图片[4]-事务管理-深吸氧

在OpenSessionInViewFilter中进行事务管理(暂时不考虑事务传播机制)

图片[5]-事务管理-深吸氧

注意:在jdbc操作中不要关闭连接

图片[6]-事务管理-深吸氧
© 版权声明
THE END
请撒泡尿证明你到此一游
点赞1 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容