Spring交易管理

來源:互聯網
上載者:User
對於傳統的基於特定事務資源的交易處理而言(如基於JDBC 的資料庫訪問),Spring並不會對其產生什麼影響,我們照樣可以成功編寫並運行這樣的代碼。同時,Spring還提供了一些輔助類可供我們選擇使用,這些輔助類簡化了傳統的資料庫操作流程,在一定程度上節省了工作量,提高了編碼效率。對於依賴容器的參數化交易管理而言,Spring 則表現出了極大的價值。Spring本身也是一個容器,只是相對EJB容器而言,Spring顯得更為輕便小巧。我們無需付出其他方面的代價,即可通過Spring實現基於容器的交易管理(本質上來講,Spring的交易管理是基於動態AOP)。下面這段xml配置片斷展示了Spring中的事務設定方式:<beans><bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"destroy-method="close"><property name="driverClassName"><value>org.gjt.mm.mysql.Driver</value></property><property name="url"><value>jdbc:mysql://localhost/sample</value></property><property name="username"><value>user</value></property><property name="password"><value>mypass</value></property></bean><bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><property name="dataSource"><ref local="dataSource" /></property></bean>    <bean id="userDAO" class="net.xiaxin.dao.UserDAO">    <property name="dataSource">    <ref local="dataSource" />    </property>    </bean>    <bean id="userDAOProxy"    class="org.springframework.transaction.interceptor.TransactionProxyF actoryBean">    <property name="transactionManager">    <ref bean="transactionManager" />    </property>    <property name="target">    <ref local="userDAO" />    </property>    <property name="transactionAttributes">    <props>    <prop key="insert*">PROPAGATION_REQUIRED</prop>    <prop key="get*"></prop>    </props>    </property>    </bean></beans>     配置中包含了dataSource,transactionManager 等資源定義。這些資源都為一個名為userDAOProxy 的TransactionProxyFactoryBean 服務, userDAOProxy 則對包含實際資料邏輯的userDAO進行了事務性封裝。可以看到,在userDAOProxy 的"transactionAttributes"屬性中,我們定義了針對userDAO 的事務策略,即將所有名稱以insert 開始的方法(如UserDAO.insertUser方法)納入交易管理範圍。如果此方法中拋出異常,則Spring將當前交易回復,如果方法正常結束,則提交事務。而對所有名稱以get 開始的方法(如UserDAO.getUser 方法)則以唯讀交易處理機制進行處理。(設為唯讀型事務,可以使持久層嘗試對資料操作進行最佳化,如對於唯讀事務Hibernate將不執行flush操作,而某些資料庫連接池和JDBC 驅動也對唯讀型操作進行了特別最佳化。)結合上面這段申明帶來的感性認知,看看Spring 的交易管理機制與EJB 中交易管理有何不同,或者有何優勢。這裡自然有許多方面可以比較,不過,筆者認為其中最為關鍵的兩點是:1. Spring可以將任意Java Class 納入交易管理這裡的UserDAO只是我們編寫的一個普通Java Class,其中包含了一些基本的資料應用邏輯。通過Spring,我們即可簡單的實現事務的可配置化。也就是說,我們可以隨意為某個類的某個方法指定交易管理機制。與之對比,如果使用EJB容器提供的交易管理功能,我們不得不按照EJB規範編將UserDAO 進行改造,將其轉換為一個標準的EJB。2. Spring交易管理並不依賴特定的事務資源。EJB 容器必須依賴於JTA 提供事務支援。而Spring 的交易管理則支援JDBC、JTA 等多種事務資源。這為我們提供了更多的選擇,從而也使得我們的系統部署更加靈活。對Spring交易管理機制進行簡單分析之後,我們將結合持久層封裝的具體事務應用機制,對Spring中的交易管理進行更具實效的探討。

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.