spring的交易管理有幾種方式實現

來源:互聯網
上載者:User
Spring+Hibernate的實質:就是把Hibernate用到的資料來源Datasource,Hibernate的SessionFactory執行個體,交易管理員HibernateTransactionManager,都交給Spring管理。那麼再沒整合之前Hibernate是如何?交易管理的呢?通過ServletFilter實現資料庫事務的管理,這樣就避免了在資料庫操作中每次都要進行資料庫交易處理。一.事務的4個特性:   原子性:一個事務中所有對資料庫的操作是一個不可分割的操作序列,要麼全做,要麼全部做。   一致性:資料不會因為事務的執行而遭到破壞。   隔離性:一個事務的執行,不受其他事務(進程)的幹擾。既並發執行的個事務之間互不干擾。   持久性:一個事務一旦提交,它對資料庫的改變將是永久的。二.事務的實現方式:實現方式共有兩種:編碼方式;聲明式交易管理方式。基於AOP技術實現的聲明式交易管理,實質就是:在方法執行前後進行攔截,然後在目標方法開始之前建立並加入事務,執行完目標方法後根據執行情況提交或復原事務。聲明式交易管理又有兩種方式:基於XML設定檔的方式;另一個是在業務方法上進行@Transactional註解,將事務規則應用到商務邏輯中。三.建立事務的時機:是否需要建立事務,是由事務傳播行為控制的。讀資料不需要或只為其指定唯讀事務,而資料的插入,修改,刪除就需要交易管理了。一種常見的交易管理配置:事務攔截器TransactionInterceptor和事務自動代理BeanNameAutoProxyCreator相結合的方式 <!--定義Hibernate的交易管理員HibernateTransactionManager -->    <bean id="transactionManager"      class="org.springframework.orm.hibernate3.HibernateTransactionManager">        <!-- 依賴注入上面定義的sessionFactory -->        <property name="sessionFactory" ref="sessionFactory"/>    </bean>    <!--定義Spring的事務攔截器TransactionInterceptor -->    <bean id="transactionInterceptor"      class="org.springframework.transaction.interceptor.TransactionInterceptor">    <!--  依賴注入上面定義的交易管理員transactionManager -->        <property name="transactionManager" ref="transactionManager"/>      <!-- 定義需要進行事務攔截的方法及所採用的事務控制類型 -->        <property name="transactionAttributes">        <props>    <!-- 以browse、list、load、get及is開頭的所有方法採用唯讀型事務控制類型 -->    <prop key="browse*">PROPAGATION_REQUIRED,readOnly</prop>    <prop key="list*">PROPAGATION_REQUIRED,readOnly</prop>    <prop key="load*">PROPAGATION_REQUIRED,readOnly</prop>    <prop key="get*">PROPAGATION_REQUIRED,readOnly</prop>    <prop key="is*">PROPAGATION_REQUIRED,readOnly</prop>    <!-- 所有方法均進行事務控制,如果當前沒有事務,則建立一個事務 -->    <prop key="*">PROPAGATION_REQUIRED</prop>    </props>    </property></bean>    <!-- 定義BeanNameAutoProxyCreatorf進行Spring的交易處理-->    <bean class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">    <!--  針對指定的bean自動產生業務代理 -->    <property name="beanNames">             <list>                <value>adminService</value>                <value>columnsService</value>                <value>newsService</value>                <value>crawlService</value>                <value>memberLevelService</value>                <value>memberService</value>                <value>categoryService</value>                <value>merService</value>                <value>cartService</value>                <value>ordersService</value>                <value>trafficService</value>            </list>    </property>    <!--  這個屬性為true時,表示被代理的是目標類本身而不是目標類的介面 -->    <property name="proxyTargetClass">    <value>true</value>    </property>       <!--  依賴注入上面定義的事務攔截器transactionInterceptor -->        <property name="interceptorNames">            <list>                <value>transactionInterceptor</value>             </list>        </property>    </bean>尤其注意:如下***********************************************************************************************************【以上的事務攔截器和事務自動代理方式實現原理:像Struts2一樣,都是憑藉強大的攔截器功能對商務邏輯方法的調用進行攔截,然後又BeanNameAutoProxyCreator自動產生事務代理,最後送交易管理員,統一管理】*********************************************************************************************************** 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.