1 / 9
文档名称:

Spring Framework @Transactional注释陷阱.doc

格式:doc   页数:9页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

Spring Framework @Transactional注释陷阱.doc

上传人:xxj16588 2016/5/4 文件大小:0 KB

下载得到文件列表

Spring Framework @Transactional注释陷阱.doc

相关文档

文档介绍

文档介绍:Spring Framework ***@Transactional 注释陷阱 PROPAGATION_REQUIRED-- 支持当前事务, 如果当前没有事务, 就新建一个事务。这是最常见的选择。 PROPAGATION_SUPPORTS-- 支持当前事务, 如果当前没有事务, 就以非事务方式执行。 PROPAGATION_MANDATORY-- 支持当前事务,如果当前没有事务,就抛出异常。 PROPAGATION_REQUIRES_NEW-- 新建事务, 如果当前存在事务, 把当前事务挂起。 PROPAGATION_NOT_SUPPORTED-- 以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。 PROPAGATION_NEVER-- 以非事务方式执行,如果当前存在事务,则抛出异常。清单 4. 使用***@Transactional 注释 public class TradingServiceImpl { ***@PersistenceContext(unitName="trading") EntityManager em; ***@Transactional public long insertTrade(TradeData trade) throws Exception { (trade); return (); }} 现在重新测试代码,您发现上述方法仍然不能工作。问题在于您必须告诉 Spring Framework ,您正在对事务管理应用注释。除非您进行充分的单元测试, 否则有时候很难发现这个陷阱。这通常只会导致开发人员在 Spring 配置文件中简单地添加事务逻辑, 而不会使用注释。要在 Spring 中使用***@Transactional 注释, 必须在 Spring 配置文件中添加以下代码行: <tx:annotation-driven transaction-manager="transactionManager"/> transaction-manager 属性保存一个对在 Spring 配置文件中定义的事务管理器 bean 的引用。这段代码告诉 Spring 在应用事务***时使用***@Transaction 注释。如果没有它,就会忽略***@Transactional 注释,导致代码不会使用任何事务。让基本的***@Transactional 注释在清单 4 的代码中工作仅仅是开始。注意,清单 4 使用***@Transactional 注释时没有指定任何额外的注释参数。我发现许多开发人员在使用***@Transactional 注释时并没有花时间理解它的作用。例如,像我一样在清单 4 中单独使用***@Transactional 注释时,事务传播模式被设置成什么呢?只读标志被设置成什么呢?事务隔离级别的设置是怎样的?更重要的是, 事务应何时回滚工作?理解如何使用这个注释对于确保在应用程序中获得合适的事务支持级别非常重要。回答我刚才提出的问题: 在单独使用不带任何参数的***@Transactional 注释时,传播模式要设置为 REQUIRED ,只读标志设置为 false ,事务隔离级别设置为 MITTED , 而且事务不会针对受控异常( checked exception ) 回滚。***@Transactional 只读标志陷阱我在