Spring高级事务管理难点难点剖析27页.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Spring高级事务管理难点难点剖析27页

* * * * * * * * * * * * * * * * * * * * * * Spring高级事务管理 难点剖析 1-1:DAO和事务管理的牵绊 问题: 很少使用Spring但不使用Spring事务管理器的应用,因此常常有人会问:是否用了Spring,就一定要用Spring事务管理器,否则就无法进行数据的持久化操作呢?事务管理器和DAO是什么关系呢? 1-2:DAO和事务管理的牵绊 真相: 答案当然是否定的!我们都知道:事务管理是保证数据操作的事务性(即原子性,一致性,隔离性,持久性,也即所谓的ACID),脱离了事务性,DAO照样可以顺利地进行数据的操作。 2-1:应用分层的迷惑 问题: Web,Service及DAO三层划分就像西方国家的立法、行政、司法三权分立一样被奉为金科玉律,是否要使用Spring的事务管理就一定先要进行三层的划分呢?是否每一层都需要有接口+实现类呢? 2-2:应用分层的迷惑 真相: 应用代码分层和Spring的事务管理是两回事,没有应用分层照样可以进行Spring事务管理。Spring的事务管理也不依赖于接口+实现类的开发模式。 3-1:事务方法嵌套调用的迷茫 问题: 一个事务方法调用另一个事务方法会产生两个事务,还是只有一个事务? 3-2 认识TransactionDefinition int getPropagationBehavior():事务的传播行为 int getIsolationLevel():事务的隔离级别 int getTimeout():事务的过期时间 boolean isReadOnly():事务的读写特性。 很明显,除了事务的传播行为外,事务的其它特性Spring是借助底层资源的功能来完成的,Spring无非只充当个代理的角色。但是事务的传播行为却是Spring凭借自身的框架提供的功能 3-3 Spring事务传播行为 ?PROPAGATION_REQUIRED:如果当前没有事务,就新建一个事务,如果已经存在一个事务中,加入到这个事务中。这是最常见的选择。 ?PROPAGATION_SUPPORTS:支持当前事务,如果当前没有事务,就以非事务方式执行。 ?PROPAGATION_MANDATORY:使用当前的事务,如果当前没有事务,就抛出异常。 ?PROPAGATION_REQUIRES_NEW:新建事务,如果当前存在事务,把当前事务挂起。 ?PROPAGATION_NOT_SUPPORTED:以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。 ?PROPAGATION_NEVER:以非事务方式执行,如果当前存在事务,则抛出异常。 ?PROPAGATION_NESTED:如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则执行与PROPAGATION_REQUIRED类似的操作。 所谓事务传播行为就是多个事务方法相互调用时,事务如何在这些方法间传播。Spring支持7种事务传播行为 3-4:事务方法嵌套调用的迷茫 真相: Spring默认的事务传播行为是PROPAGATION_REQUIRED,它适合于绝大多数的情况。假设ServiveX#methodX()都工作在事务环境下(即都被Spring事务增强了),假设程序中存在如下的调用链:Service1#method1()-Service2#method2()-Service3#method3(),那么这3个服务类的3个方法通过Spring的事务传播机制都工作在同一个事务中。 4-1:多线程的困惑 问题: 如果在一个ServiceA和a()方法中启动一个线程,在这个新创建的线程中执行ServiceB的事务方法b(),ServiceA的 a()方法和ServiceB的b()方法是工作在同一事务环境中,还是分别拥有一个独立的事务呢? 4-2:多线程的困惑 真相: 在相同线程中进行相互嵌套调用的事务方法工作于相同的事务中。如果这些相互嵌套调用的方法工作在不同的线程中,不同线程下的事务方法工作在独立的事务中。 5-1:联合军种作战的混乱 问题: Hibernate,Spring JDBC,iBatis等多种数据持久方法如何联合使用,会存在哪些问题,如何进行事务管理的配置? 5-2:如何配置事务管理器 如果你采用了一个高端ORM技术(Hibernate,JPA,JDO),同时采用一个JDBC技术(Spring JDBC,iBatis),由于前者的会话(Session)是对后者连接(Connection)的封装,Spring会“足够智能地”在同一个事务线程让前者的会话封装后者

文档评论(0)

baoyue + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档