真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

事務(wù)的回滾五種方法-創(chuàng)新互聯(lián)

前段時間對Spring的事務(wù)配置做了比較深入的研究,在此之間對Spring的事務(wù)配置雖說也配置過,但是一直沒有一個清楚的認(rèn)識。通過這次的學(xué)習(xí)發(fā)覺Spring的事務(wù)配置只要把思路理清,還是比較好掌握的。

站在用戶的角度思考問題,與客戶深入溝通,找到云溪網(wǎng)站設(shè)計與云溪網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗,讓設(shè)計與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個性化、用戶體驗好的作品,建站類型包括:做網(wǎng)站、網(wǎng)站建設(shè)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、主機(jī)域名虛擬主機(jī)、企業(yè)郵箱。業(yè)務(wù)覆蓋云溪地區(qū)。

   總結(jié)如下:
    Spring配置文件中關(guān)于事務(wù)配置總是由三個組成部分,分別是DataSource、TransactionManager和代理機(jī)制這三部分,無論哪種配置方式,一般變化的只是代理機(jī)制這部分。
    DataSource、TransactionManager這兩部分只是會根據(jù)數(shù)據(jù)訪問方式有所變化,比如使用Hibernate進(jìn)行數(shù)據(jù)訪問時,DataSource實際為SessionFactory,TransactionManager的實現(xiàn)為HibernateTransactionManager。
    具體如下圖:

根據(jù)代理機(jī)制的不同,總結(jié)了五種Spring事務(wù)的配置方式,配置文件如下:
    第一種方式:每個Bean都有一個代理

    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:aop="http://www.springframework.org/schema/aop"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
           http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
           http://www.springframework.org/schema/context
           http://www.springframework.org/schema/context/spring-context-2.5.xsd
           http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd">
                class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
       
       
   

   
            class="org.springframework.orm.hibernate3.HibernateTransactionManager">
       
   

  
   
   
       
   

  
            class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
          
              
       
        
       
       
           
                PROPAGATION_REQUIRED
           

       

   
 

    第二種方式:所有Bean共享一個代理基類

    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:aop="http://www.springframework.org/schema/aop"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
           http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
           http://www.springframework.org/schema/context
           http://www.springframework.org/schema/context/spring-context-2.5.xsd
           http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd">
                class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
       
       
   

   
            class="org.springframework.orm.hibernate3.HibernateTransactionManager">
       
   

  
                class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"
            lazy-init="true" abstract="true">
       
       
       
       
           
                PROPAGATION_REQUIRED
           

       

   
  
 
   
   
       
   

  
   
         
   


 
 
 
第三種方式:使用攔截器

    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:aop="http://www.springframework.org/schema/aop"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
           http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
           http://www.springframework.org/schema/context
           http://www.springframework.org/schema/context/spring-context-2.5.xsd
           http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd">
                class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
       
       
   

   
            class="org.springframework.orm.hibernate3.HibernateTransactionManager">
       
   

 
            class="org.springframework.transaction.interceptor.TransactionInterceptor">
       
       
       
           
                PROPAGATION_REQUIRED
           

       

   

    
   
       
           
                *Dao
           

       

       
           
                transactionInterceptor
           

       

   

 
   
   
       
   


第四種方式:使用tx標(biāo)簽配置的攔截器

    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:aop="http://www.springframework.org/schema/aop"
    xmlns:tx="http://www.springframework.org/schema/tx"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
           http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
           http://www.springframework.org/schema/context
           http://www.springframework.org/schema/context/spring-context-2.5.xsd
           http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
           http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">
   
   
                class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
       
       
   

   
            class="org.springframework.orm.hibernate3.HibernateTransactionManager">
       
   

   
       
           
       

   

  
   
                    expression="execution(* com.bluesky.spring.dao.*.*(..))" />
                    pointcut-ref="interceptorPointCuts" />      
   
    

 
第五種方式:全注解

    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:aop="http://www.springframework.org/schema/aop"
    xmlns:tx="http://www.springframework.org/schema/tx"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
           http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
           http://www.springframework.org/schema/context
           http://www.springframework.org/schema/context/spring-context-2.5.xsd
           http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
           http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">
   
   
   
                class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
       
       
   

   
            class="org.springframework.orm.hibernate3.HibernateTransactionManager">
       
   

  

 
 
package com.bluesky.spring.dao;
import java.util.List;
import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import org.springframework.stereotype.Component;
import com.bluesky.spring.domain.User;
@Transactional
@Component("userDao")
public class UserDaoImpl extends HibernateDaoSupport implements UserDao {
    public List listUsers() {
        return this.getSession().createQuery("from User").list();
    }
  
   
}
 
 
 
 
 
注意的幾點:
1、@Transactional只能被應(yīng)用到public方法上,對于其他非public的方法,如果標(biāo)記了@Transactional也不會報錯,但方法沒有事務(wù)功能。
2、默認(rèn)情況下,一個有事務(wù)方法,遇到RuntimeException時會回滾,遇到受檢查的異常是不會回滾的。要想所有異常都回滾,要加上@Transactional(rollbackFor={Exception.class, 其他異常})。
 
Transactional的所有可選屬性如下:
屬性                                      類型                          默認(rèn)值                     說明
propagation                   Propagation枚舉           REQUIRED       事務(wù)傳播屬性(下有說明)
isolation                         isolation枚舉                 DEFAULT         事務(wù)隔離級別(另有說明)
readOnly                      boolean                           false               是否只讀
timeout                           int                                   -1                 超時(秒)
rollbackFor                   Class[]                               {}                   需要回滾的異常類
rollbackForClassName      String[]                          {}                 需要回滾的異常類名
noRollbackFor             Class[]                                   {}               不需要回滾的異常類
noRollbackForClassName    String[]                  {}             不需要回滾的異常類名
 
事務(wù)的隔離級別  有如下可選:
可以去看spring的源代碼:org.springframework.transaction.annotation.Isolation
DEFAULT                   采用數(shù)據(jù)庫默認(rèn)隔離級別
READ_UNCOMMITTED
READ_COMMITTED
REPEATABLE__READ
SERIALIZABLE
 
事務(wù)的傳播屬性,有如下可選:
可以去看spring的源代碼:org.springframework.transaction.annotation.Propagation
REQUIRED:業(yè)務(wù)方法需要在一個事務(wù)中運行,如果方法運行時,已處在一個事務(wù)中,那么就加入該事務(wù),否則自己創(chuàng)建一個新的事物,這是spring默認(rèn)的傳播行為。
SUPPORTS:如果業(yè)務(wù)方法在某個事物范圍內(nèi)被調(diào)用,則方法成為該事務(wù)的一部分,如果業(yè)務(wù)方法在事務(wù)范圍外被 調(diào)用,則方法在沒有事務(wù)的環(huán)境下執(zhí)行。
MANDATORY:只能在一個已存在事務(wù)中執(zhí)行,業(yè)務(wù)方法不能發(fā)起自己的事物,如果業(yè)務(wù)方法在沒有事務(wù)的環(huán)境下調(diào)用,就拋異常。
REQUIRES_NEW:業(yè)務(wù)方法總是會為自己發(fā)起一個新的事務(wù),如果方法已運行在一個事務(wù)中,則原有方法被掛起, 新的事務(wù)被創(chuàng)建,直到方法結(jié)束,新事務(wù)才結(jié)束,原先的事務(wù)才會恢復(fù)執(zhí)行。
NOT_SUPPORTED:聲明方法需要事務(wù),如果方法沒有關(guān)聯(lián)到一個事務(wù),容器不會為他開啟事務(wù),如果方法在一個事務(wù)中被調(diào)用,該事務(wù)會被掛起,在方法調(diào)用結(jié)束后,原先的事務(wù)便會恢復(fù)執(zhí)行。
NEVER:聲明方法絕對不能在事務(wù)范圍內(nèi)執(zhí)行,如果方法在某個事務(wù)范圍內(nèi)執(zhí)行,容器就拋異常,只有沒關(guān)聯(lián)到 事務(wù),才正常執(zhí)行。
NESTED:如果一個活動的事務(wù)存在,則運行在一個嵌套的事務(wù)中,如果沒有活動的事務(wù),則按REQUIRED屬性執(zhí) 行。它使用了一個單獨的事務(wù),這個事務(wù)擁有多個可以回滾的保證點,內(nèi)部事務(wù)回滾不會對外部事務(wù)造 成影響,它只對DataSource。
 

創(chuàng)新互聯(lián)www.cdcxhl.cn,專業(yè)提供香港、美國云服務(wù)器,動態(tài)BGP最優(yōu)骨干路由自動選擇,持續(xù)穩(wěn)定高效的網(wǎng)絡(luò)助力業(yè)務(wù)部署。公司持有工信部辦法的idc、isp許可證, 機(jī)房獨有T級流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確進(jìn)行流量調(diào)度,確保服務(wù)器高可用性。佳節(jié)活動現(xiàn)已開啟,新人活動云服務(wù)器買多久送多久。


新聞名稱:事務(wù)的回滾五種方法-創(chuàng)新互聯(lián)
本文鏈接:http://weahome.cn/article/dpjgjc.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部