spring里的事务处理怎么理解

 我来答
bailin710258
2012-10-29 · TA获得超过176个赞
知道小有建树答主
回答量:319
采纳率:0%
帮助的人:161万
展开全部
事物由若干步骤组成,这些步骤有一定的逻辑关系。事物处理就是把这些步骤视为一个不可分割的整体(即事物),只要这些步骤中有一个没有完整执行,那么整个事物就视为没有执行,即“回滚”。反之全部步骤都完整执行后,即“提交”。举个例子:你去银行取钱(事物),有以下的步骤:输入密码、银行核对密码、给钱给你同时修改你的账号信息。这些步骤中只要有一个步骤没有完整执行,整个事物就视为没有执行就要回滚到事物执行前的状态。
jamxval
2012-10-29 · TA获得超过6822个赞
知道大有可为答主
回答量:4308
采纳率:82%
帮助的人:1435万
展开全部
你听说过 EJB 2.0 里面的 EJB 是如何处理事务的么?如果你下载个 EJB 2.0 规范的 PDF 看一下几种 transaction attribute 设定下事务的最终结果是什么样的,更重要的是 RemoteException 和 RuntimeException 为什么叫系统异常,系统异常导致 EJB 服务器自动回滚事务,而应用程序异常都表示应用程序自己来决定是否回滚异常(通过 mySessionContext.setRollbackOnly() 来回滚事务)。

EJB 的事务是在服务器内部实现是根据你的transaction attribute 的设定是否要给当前线程绑定一个 transaction (通过 ThreadLocal.set($transaction)),如果碰到 requiresNew 则把原来 ThreadLocal.get() 得到的压入堆栈,重新 TheadLocal.set 另一个。而在EJB调用过程中的事务则是通过 ThreadLocal.get() 得到当前的事务。这些服务器内部的做法我们不需要知道,只需要知道事务是通过与线程绑定在一起的,根据 transaction attribute 来决定当前绑定的是哪个事务,与调用者的事务是共用一个还是新开另一个。

知道事务的线程绑定和 EJB 中异常的分类就明白 EJB 是如何管理事务的。而 Spring 的事务管理其实也是类似的,它也是使用类似的将事务绑定在当前调用的线程,然后也根据你声明的什么 exception 需要回滚事务来决定的事务的提交还是回滚。
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式