SpringMVC+MyBatis整合——事務管理


  項目一直沒有做事務管理,這幾天一直在想着解決這事,今天早上終於解決了。接下來直接上配置步驟。

  我們項目采用的基本搭建環境:SpringMVC、MyBatis、Oracle11g、WebLogic10。
      Spring事務管理分解了傳統的全局事務管理和本地事務管理的劣勢,使得在任何環境中都可以使用統一的事務管理模型,你可以寫一次代碼,然后在不同的環 境從你的代碼里面配置不同的事務管理策略,Spring提供兩種事務管理策略:一種是聲明式事務管理策略,另一種是編程式事務管理策略,這里主要介紹聲明 式事務管理策略,由於采用的是SpringMVC、 MyBatis,故統一采用了標注來聲明Service、Controller,由於服務器啟動時的加載配置文件的順序為web.xml---->applicationContext.xml(Spring的配置文件)----> *-servlet.xml(SpringMVC的配置文件),由於applicationContext.xml配置文件中Controller會先進行掃描裝配,但是此時service還沒有進行事務增強處理,得到的將是原樣的Service(沒有經過事務加強處理,故而沒有事務處理能力),所以我們 必須在applicationContext.xml中不掃描Controller,配置如下:

     1.applicationContext.xml中,去掉對controller的掃描

  <context:component-scan base-package="com.digitalchina.*">
        <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller" />
    </context:component-scan>

  2.*-servlet.xml中,去掉對 service的掃描,加入對controller的掃描

 <context:component-scan base-package="com.digitalchina.*">
        <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller" />
        <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Service" />
    </context:component-scan>

  3.事務的配置只有在 applicationContext.xml中才會起作用,即
  <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
       <property name="dataSource" ref="dataSource" />
     </bean>
     必須配置在 applicationContext.xml 中

  4.用事務去控制的service,不能加try catch去捕獲異常,否則不能被spring攔截到,事務就失效了。

  5.在Service實現類中增加@Transactional注解即可控制事務。

 

 

    


免責聲明!

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



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