WEB开发网
开发学院软件开发Java Spring 事务管理高级应用难点剖析,第 1 部分 阅读

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

 2010-03-22 00:00:00 来源:WEB开发网   
核心提示: 日志中粗体部分说明了 MixLayerUserService#logon 方法已经正确运行在事务上下文中,Spring 框架本身不应该是复杂化代码的理由,Spring 事务管理高级应用难点剖析,第 1 部分(9),使用 Spring 的开发者应该是无拘无束的:从实际应用出发,去除掉那些所谓原则性

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

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

事务方法嵌套调用的迷茫

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

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

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

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

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

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

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

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

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

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

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

上一页  4 5 6 7 8 9 10  下一页

Tags:Spring 事务管理 高级

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接