欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

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

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

站在用戶(hù)的角度思考問(wèn)題,與客戶(hù)深入溝通,找到云溪網(wǎng)站設(shè)計(jì)與云溪網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計(jì)與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個(gè)性化、用戶(hù)體驗(yàn)好的作品,建站類(lèi)型包括:做網(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ù)配置總是由三個(gè)組成部分,分別是DataSource、TransactionManager和代理機(jī)制這三部分,無(wú)論哪種配置方式,一般變化的只是代理機(jī)制這部分。
    DataSource、TransactionManager這兩部分只是會(huì)根據(jù)數(shù)據(jù)訪(fǎng)問(wèn)方式有所變化,比如使用Hibernate進(jìn)行數(shù)據(jù)訪(fǎng)問(wèn)時(shí),DataSource實(shí)際為SessionFactory,TransactionManager的實(shí)現(xiàn)為HibernateTransactionManager。
    具體如下圖:

根據(jù)代理機(jī)制的不同,總結(jié)了五種Spring事務(wù)的配置方式,配置文件如下:
    第一種方式:每個(gè)Bean都有一個(gè)代理
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    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">
    <bean id="sessionFactory"
            class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
        <property name="configLocation" value="classpath:hibernate.cfg.xml" />
        <property name="configurationClass" value="org.hibernate.cfg.AnnotationConfiguration" />
    </bean>
    <!-- 定義事務(wù)管理器(聲明式的事務(wù)) -->
    <bean id="transactionManager"
        class="org.springframework.orm.hibernate3.HibernateTransactionManager">
        <property name="sessionFactory" ref="sessionFactory" />
    </bean>
  
    <!-- 配置DAO -->
    <bean id="userDaoTarget" class="com.bluesky.spring.dao.UserDaoImpl">
        <property name="sessionFactory" ref="sessionFactory" />
    </bean>
  
    <bean id="userDao"
        class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
           <!-- 配置事務(wù)管理器 -->
           <property name="transactionManager" ref="transactionManager" />   
        <property name="target" ref="userDaoTarget" />
         <property name="proxyInterfaces" value="com.bluesky.spring.dao.GeneratorDao" />
        <!-- 配置事務(wù)屬性 -->
        <property name="transactionAttributes">
            <props>
                <prop key="*">PROPAGATION_REQUIRED</prop>
            </props>
        </property>
    </bean> 
</beans>
    第二種方式:所有Bean共享一個(gè)代理基類(lèi)
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    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">
    <bean id="sessionFactory"
            class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
        <property name="configLocation" value="classpath:hibernate.cfg.xml" />
        <property name="configurationClass" value="org.hibernate.cfg.AnnotationConfiguration" />
    </bean>
    <!-- 定義事務(wù)管理器(聲明式的事務(wù)) -->
    <bean id="transactionManager"
        class="org.springframework.orm.hibernate3.HibernateTransactionManager">
        <property name="sessionFactory" ref="sessionFactory" />
    </bean>
  
    <bean id="transactionBase"
            class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"
            lazy-init="true" abstract="true">
        <!-- 配置事務(wù)管理器 -->
        <property name="transactionManager" ref="transactionManager" />
        <!-- 配置事務(wù)屬性 -->
        <property name="transactionAttributes">
            <props>
                <prop key="*">PROPAGATION_REQUIRED</prop>
            </props>
        </property>
    </bean>  
 
    <!-- 配置DAO -->
    <bean id="userDaoTarget" class="com.bluesky.spring.dao.UserDaoImpl">
        <property name="sessionFactory" ref="sessionFactory" />
    </bean>
  
    <bean id="userDao" parent="transactionBase" >
        <property name="target" ref="userDaoTarget" /> 
    </bean>
</beans>
 
 
 
第三種方式:使用攔截器
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    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">
    <bean id="sessionFactory"
            class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
        <property name="configLocation" value="classpath:hibernate.cfg.xml" />
        <property name="configurationClass" value="org.hibernate.cfg.AnnotationConfiguration" />
    </bean>
    <!-- 定義事務(wù)管理器(聲明式的事務(wù)) -->
    <bean id="transactionManager"
        class="org.springframework.orm.hibernate3.HibernateTransactionManager">
        <property name="sessionFactory" ref="sessionFactory" />
    </bean>
 
    <bean id="transactionInterceptor"
        class="org.springframework.transaction.interceptor.TransactionInterceptor">
        <property name="transactionManager" ref="transactionManager" />
        <!-- 配置事務(wù)屬性 -->
        <property name="transactionAttributes">
            <props>
                <prop key="*">PROPAGATION_REQUIRED</prop>
            </props>
        </property>
    </bean>
    
    <bean class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
        <property name="beanNames">
            <list>
                <value>*Dao</value>
            </list>
        </property>
        <property name="interceptorNames">
            <list>
                <value>transactionInterceptor</value>
            </list>
        </property>
    </bean>
 
    <!-- 配置DAO -->
    <bean id="userDao" class="com.bluesky.spring.dao.UserDaoImpl">
        <property name="sessionFactory" ref="sessionFactory" />
    </bean>
</beans>
第四種方式:使用tx標(biāo)簽配置的攔截器
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    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">
    <context:annotation-config />
    <context:component-scan base-package="com.bluesky" />
    <bean id="sessionFactory"
            class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
        <property name="configLocation" value="classpath:hibernate.cfg.xml" />
        <property name="configurationClass" value="org.hibernate.cfg.AnnotationConfiguration" />
    </bean>
    <!-- 定義事務(wù)管理器(聲明式的事務(wù)) -->
    <bean id="transactionManager"
        class="org.springframework.orm.hibernate3.HibernateTransactionManager">
        <property name="sessionFactory" ref="sessionFactory" />
    </bean>
    <tx:advice id="txAdvice" transaction-manager="transactionManager">
        <tx:attributes>
            <tx:method name="*" propagation="REQUIRED" />
        </tx:attributes>
    </tx:advice>
  
    <aop:config>
        <aop:pointcut id="interceptorPointCuts"
            expression="execution(* com.bluesky.spring.dao.*.*(..))" />
        <aop:advisor advice-ref="txAdvice"
            pointcut-ref="interceptorPointCuts" />      
    </aop:config>    
</beans>
 
第五種方式:全注解
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    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">
    <context:annotation-config />
    <context:component-scan base-package="com.bluesky" />
    <tx:annotation-driven transaction-manager="transactionManager"/>
    <bean id="sessionFactory"
            class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
        <property name="configLocation" value="classpath:hibernate.cfg.xml" />
        <property name="configurationClass" value="org.hibernate.cfg.AnnotationConfiguration" />
    </bean>
    <!-- 定義事務(wù)管理器(聲明式的事務(wù)) -->
    <bean id="transactionManager"
        class="org.springframework.orm.hibernate3.HibernateTransactionManager">
        <property name="sessionFactory" ref="sessionFactory" />
    </bean>
  
</beans>
 
 
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<User> listUsers() {
        return this.getSession().createQuery("from User").list();
    }
  
   
}
 
 
 
 
 
注意的幾點(diǎn):
1、@Transactional只能被應(yīng)用到public方法上,對(duì)于其他非public的方法,如果標(biāo)記了@Transactional也不會(huì)報(bào)錯(cuò),但方法沒(méi)有事務(wù)功能。
2、默認(rèn)情況下,一個(gè)有事務(wù)方法,遇到RuntimeException時(shí)會(huì)回滾,遇到受檢查的異常是不會(huì)回滾的。要想所有異常都回滾,要加上@Transactional(rollbackFor={Exception.class, 其他異常})。
 
Transactional的所有可選屬性如下:
屬性                                      類(lèi)型                          默認(rèn)值                     說(shuō)明
propagation                   Propagation枚舉           REQUIRED       事務(wù)傳播屬性(下有說(shuō)明)
isolation                         isolation枚舉                 DEFAULT         事務(wù)隔離級(jí)別(另有說(shuō)明)
readOnly                      boolean                           false               是否只讀
timeout                           int                                   -1                 超時(shí)(秒)
rollbackFor                   Class[]                               {}                   需要回滾的異常類(lèi)
rollbackForClassName      String[]                          {}                 需要回滾的異常類(lèi)名
noRollbackFor             Class[]                                   {}               不需要回滾的異常類(lèi)
noRollbackForClassName    String[]                  {}             不需要回滾的異常類(lèi)名
 
事務(wù)的隔離級(jí)別  有如下可選:
可以去看spring的源代碼:org.springframework.transaction.annotation.Isolation
DEFAULT                   采用數(shù)據(jù)庫(kù)默認(rèn)隔離級(jí)別
READ_UNCOMMITTED
READ_COMMITTED
REPEATABLE__READ
SERIALIZABLE
 
事務(wù)的傳播屬性,有如下可選:
可以去看spring的源代碼:org.springframework.transaction.annotation.Propagation
REQUIRED:業(yè)務(wù)方法需要在一個(gè)事務(wù)中運(yùn)行,如果方法運(yùn)行時(shí),已處在一個(gè)事務(wù)中,那么就加入該事務(wù),否則自己創(chuàng)建一個(gè)新的事物,這是spring默認(rèn)的傳播行為。
SUPPORTS:如果業(yè)務(wù)方法在某個(gè)事物范圍內(nèi)被調(diào)用,則方法成為該事務(wù)的一部分,如果業(yè)務(wù)方法在事務(wù)范圍外被 調(diào)用,則方法在沒(méi)有事務(wù)的環(huán)境下執(zhí)行。
MANDATORY:只能在一個(gè)已存在事務(wù)中執(zhí)行,業(yè)務(wù)方法不能發(fā)起自己的事物,如果業(yè)務(wù)方法在沒(méi)有事務(wù)的環(huán)境下調(diào)用,就拋異常。
REQUIRES_NEW:業(yè)務(wù)方法總是會(huì)為自己發(fā)起一個(gè)新的事務(wù),如果方法已運(yùn)行在一個(gè)事務(wù)中,則原有方法被掛起, 新的事務(wù)被創(chuàng)建,直到方法結(jié)束,新事務(wù)才結(jié)束,原先的事務(wù)才會(huì)恢復(fù)執(zhí)行。
NOT_SUPPORTED:聲明方法需要事務(wù),如果方法沒(méi)有關(guān)聯(lián)到一個(gè)事務(wù),容器不會(huì)為他開(kāi)啟事務(wù),如果方法在一個(gè)事務(wù)中被調(diào)用,該事務(wù)會(huì)被掛起,在方法調(diào)用結(jié)束后,原先的事務(wù)便會(huì)恢復(fù)執(zhí)行。
NEVER:聲明方法絕對(duì)不能在事務(wù)范圍內(nèi)執(zhí)行,如果方法在某個(gè)事務(wù)范圍內(nèi)執(zhí)行,容器就拋異常,只有沒(méi)關(guān)聯(lián)到 事務(wù),才正常執(zhí)行。
NESTED:如果一個(gè)活動(dòng)的事務(wù)存在,則運(yùn)行在一個(gè)嵌套的事務(wù)中,如果沒(méi)有活動(dòng)的事務(wù),則按REQUIRED屬性執(zhí) 行。它使用了一個(gè)單獨(dú)的事務(wù),這個(gè)事務(wù)擁有多個(gè)可以回滾的保證點(diǎn),內(nèi)部事務(wù)回滾不會(huì)對(duì)外部事務(wù)造 成影響,它只對(duì)DataSource。
 

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

當(dāng)前文章:事務(wù)的回滾五種方法-創(chuàng)新互聯(lián)
網(wǎng)站URL:http://aaarwkj.com/article22/dpjgjc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供移動(dòng)網(wǎng)站建設(shè)、面包屑導(dǎo)航手機(jī)網(wǎng)站建設(shè)、網(wǎng)站建設(shè)企業(yè)網(wǎng)站制作、外貿(mào)網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都app開(kāi)發(fā)公司
99久久精品人妻一区| 精品国产av一区二区麻豆| 亚洲一区二区三区经典精品| 日本不卡免费一区二区视频| 六十路人妻一区二区三区| 国产午夜精品一区二区三区| 久草亚洲一区二区三区av| 日本不卡二区高清三区| 国产精品国产亚洲av| 九九热久久这里全是精品| 日韩欧美国产综合一区二区| 中文字幕精品人妻在线| 日韩不伦高清一区二区三区| 欧美性精品不卡在线观看| 蜜臀人妻久久一区二区三| 青青草原影院在线观看| 亚洲三级伦理在线视频| 日韩久久精品国产亚洲av成人| 日本一区二区国产在线| 亚洲码与欧洲码一二三| 亚洲欧美日韩国产桃色 | 91在线人妻一区二区三区| 一本之道久久成人综合| 亚洲天堂男人的天堂狠狠操| 亚洲午夜精品美女写真| 国产精品一久久香蕉产线看 | 亚洲欧美国产成人在线| 国产精品成人av在线网站| 亚洲丰满毛茸茸毛茸茸| 天天操天天射夜夜爽| 性色视频一区二区三区| 中国美女下面毛茸茸视频| 欧美一区二区男人天堂| 国产美女无遮挡免费网站| 久久国产精品一区二区三区| av基地蜜桃蜜桃蜜桃| 日产极品一区二区三区| 国产91精品在线观看| 国产黄片免费高清观看| 2004年亚洲中文字幕| 91国产自拍在线视频|