spring獨立事務分析


  最近在ssm框架的項目中需要用到獨立事務的實現,找了半天,搜集了以下理論知識為實現做准備。事務管理器為datasource

  (1)Spring在transactiondefinition接口中規定了7種類型的事務傳播行為,propagation開頭,

        1:required 如果沒有事務,就新建一個事務,如果已經存在一個事務就加入到該事務中。這是最常見的選擇。

    2:supports 支持當前事務,如果沒有則以非事務的方式執行

    3: mandatory 使用當前事務,如果沒有則拋出異常

    4:requires_new 新建事務並掛起當前事務,需要使用jtaTransactionManager作為事務管理器(獨立事務用這個)好像datasourceTransactionManager也可以用

    5:not_supported 以非事務方式運行,掛起當前事務,需要使用jtaTransactionManager作為事務管理器

    6:never 以非事務方式運行,如果存在事務則拋出異常

    7:nested 如果一個活動的事務存在,則運行在一個嵌套的事務中.,如果沒有當前事務類似於1required ,DataSourceTransactionManager使用savepoint支持            PROPAGATION_NESTED時,需要JDBC 3.0以上驅動及1.4以上的JDK版本支持,外層事務的回滾可以引起內層事務的回滾。而內層事務的異常並不會導致外層事務的回滾

  (2)在transactionManager事務管理器中定義了5個不同的事務隔離級別 isolution開頭

    1:default 默認使用數據庫的隔離級別

    2:read_uncommitted 允許其他事務可以看到當前事務未提交的數據,出現臟讀、不可重復度和幻象讀

    3:read_committed 保證當前事務修改的數據提交后才可被其他事務毒素,不會出現臟讀,會出現可重復度和幻象讀  一般用這個即可

    4:repeatable_read 可能出現幻像讀

    5:serializable 事務被處理為順序執行,耗費了最大的資源

  (3)內置事務管理器實現

  Spring提供了許多內置事務管理器實現:

  • DataSourceTransactionManager位於org.springframework.jdbc.datasource包中,數據源事務管理器,提供對單個javax.sql.DataSource事務管理,用於Spring JDBC抽象框架、iBATISMyBatis框架的事務管理;
  • JdoTransactionManager位於org.springframework.orm.jdo包中,提供對單個javax.jdo.PersistenceManagerFactory事務管理,用於集成JDO框架時的事務管理;
  • JpaTransactionManager位於org.springframework.orm.jpa包中,提供對單個javax.persistence.EntityManagerFactory事務支持,用於集成JPA實現框架時的事務管理;
  • HibernateTransactionManager位於org.springframework.orm.hibernate3包中,提供對單個org.hibernate.SessionFactory事務支持,用於集成Hibernate框架時的事務管理;該事務管理器只支持Hibernate3+版本,且Spring3.0+版本只支持Hibernate 3.2+版本;
  • JtaTransactionManager位於org.springframework.transaction.jta包中,提供對分布式事務管理的支持,並將事務管理委托給Java EE應用服務器事務管理器;
  • OC4JjtaTransactionManager位於org.springframework.transaction.jta包中,Spring提供的對OC4J10.1.3+應用服務器事務管理器的適配器,此適配器用於對應用服務器提供的高級事務的支持;
  • WebSphereUowTransactionManager位於org.springframework.transaction.jta包中,Spring提供的對WebSphere 6.0+應用服務器事務管理器的適配器,此適配器用於對應用服務器提供的高級事務的支持;
  • WebLogicJtaTransactionManager位於org.springframework.transaction.jta包中,Spring提供的對WebLogic 8.1+應用服務器事務管理器的適配器,此適配器用於對應用服務器提供的高級事務的支持。

 

代碼

DefaultTransactionDefinition def = new DefaultTransactionDefinition();
 
def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRES_NEW);
//def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED);
TransactionStatus status = transactionManagerTmp.getTransaction(def);

//需要調用的方法,獨立事務

 

ResultInfo returnResult = decpMsgServiceClient.createAndsendMessage(globalBusinessID, businessType, messageID, content);

transactionManagerTmp.commit(status);

 手動提交獨立事務


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM