快速业务通道

如何使用Eclipse CNF的Saveable Protocol实现对View的保存 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-13
5) -    Acquired Connection [org.apache.commons.dbcp.PoolableConnection@6e1cbf]   for JDBC transaction 13:24:22,921 DEBUG (DataSourceTransactionManager.java:222) -    Switching JDBC Connection   [org.apache.commons.dbcp.PoolableConnection@6e1cbf] to manual commit 13:24:22,921 DEBUG (JdbcTemplate.java:785) -    Executing prepared SQL update 13:24:22,921 DEBUG (JdbcTemplate.java:569) -    Executing prepared SQL statement   [UPDATE t_user u SET u.score = u.score + ? WHERE user_name =?] 13:24:23,140 DEBUG (JdbcTemplate.java:794) -    SQL update affected 0 rows 13:24:23,140 DEBUG (AbstractPlatformTransactionManager.java:752) -    Initiating transaction commit 13:24:23,140 DEBUG (DataSourceTransactionManager.java:265) -    Committing JDBC transaction on Connection   [org.apache.commons.dbcp.PoolableConnection@6e1cbf] 13:24:23,140 DEBUG (DataSourceTransactionManager.java:323) -    Releasing JDBC Connection  [org.apache.commons.dbcp.PoolableConnection@6e1cbf]   after transaction 13:24:23,156 DEBUG (DataSourceUtils.java:312) -    Returning JDBC Connection to DataSource

日志中粗体部分说明了 MixLayerUserService#logon 方法已经正确运行在事务上下文中。

Spring 框架本身不应该是复杂化代码的理由,使用 Spring 的开发者应该是无拘无束的: 从实际应用出发,去除掉那些所谓原则性的接口,去除掉强制分层的束缚,简单才是硬道理。

事务方法嵌套调用的迷茫

Spring 事务一个被讹传很广说法是:一个事务方法不应该调用另一个事务方法,否则将产 生两个事务。结果造成开发人员在设计事务方法时束手束脚,生怕一不小心就踩到地雷。

其实这种是不认识 Spring 事务传播机制而造成的误解,Spring 对事务控制的支持统一在 TransactionDefinition 类中描述,该类有以下几个重要的接口方法:

int getPropagationBehavior():事务的传播行为

int getIsolationLevel():事务的隔离级别

int getTimeout():事务的过期时间

boolean isReadOnly():事务的读写特性。

Spring事务管理高级应用难点剖析,第1部分(8)

时间:2012-04-26 IBM 陈雄华

很明显,除了事务的传播行为外,事务的其它特性 Spring 是借助底层资源的功能来完成的 ,Spring 无非只充当个代理的角色。但是事务的传播行为却是 Spring 凭借自身的框架提供的 功能,是 Spring 提供给开发者最珍贵的礼物,讹传的说法玷污了 Spring 事务框架最美丽的 光环。

所谓事务传播行为就是多个事务方法相互调用时,事务如何在这些方法间传播。Spring 支 持 7 种事务传播行为:

PROPAGATION_REQUIRED 如果当前没有事务,就新建一个事务,如果已经存在一个事务中, 加入到这个事务中。这是最常见的选择。

PROPAGATION_SUPPORTS 支持当前事务,如果当前没有事务,就以非事务方式执行。

PROPAGATION_MANDATORY 使用当前的事务,如果当前没有事务,就抛出异常。

PROPAGATION_REQUIRES_NEW 新建事务,如果当前存在事务,把当前事务挂起。

PROPAGATION_NOT_SUPPORTED 以非事务方式执行操作,如果当前存在事务,就把当前事务挂 起。

PROPAGATION_NEVER 以非事务方式执行,如果当前存在事务,则抛出异常。

PROPAGATION_NESTED 如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则执 行与 PROPAGATION_REQUIRED 类似的操作。

Spring 默认的事务传播行为是 PROPAGATION_REQUIRED,它适合于绝大

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号