<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    feng

    飄逸~~~~~life

    最近學習spring聲明式事務小結

    在一些需要同時操作幾個更新的業務邏輯中,而這幾個更新又是互相關聯的,也就是說我們希望它成功就一起成功,
    失敗就一起失敗。這樣我們就需要使用事務。關于如何配置spring聲明式事務就不說了,需要的人可以在網上找下,
    肯定會配置一個類似下面的bean
    <bean id="cao" 

    class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
             
    <property name="transactionManager">
                
    <ref bean="transactionManager"/>
            
    </property>
            
    <property name="target">
                
    <ref bean="cao1"/>
            
    </property>
            
    <property name="transactionAttributes">
                
    <props>
                    
    <prop key="insert*">PROPAGATION_REQUIRED</prop>
                    
    <prop key="*">PROPAGATION_REQUIRED,readOnly</prop>
                
    </props>
            
    </property>
        
    </bean>
    我在程序中使用的是spring的JdbcTemplate
    try{
     JdbcTemplate jdbcTemplate 
    = new JdbcTemplate(dataSource);
                   jdbcTemplate.update(
    "insert into NETFAXNO_TBL

    (NETFAXNO,AREAID,PHONEAREA,CITYCODE,STATUS,lasttime,bnetid) values

    (
    '"+a1+"','"+a2+"','"+a3+"','"+a4+"','"+a5+"',getdate(),'"+a6+"' )");
                   
                   jdbcTemplate.update(
    "insert into NETFAXNO_TBL

    (NETFAXNO,AREAID,PHONEAREA,CITYCODE,STATUS,lasttime,bnetid) values(
    '"+a1+Integer.valueOf("e")

    +"','"+a2+"','"+a3+"','"+a4+"','"+a5+"',getdate(),'"+a6+"' )");

                a
    =true;
                
            }
    catch(Exception e){
                e.printStackTrace();
                }
    注意我故意在程序中放了一個會報異常的代碼Integer.valueOf("e")
    測試結果是沒有成功,前一句已經在數據庫里了。
    后來修改spring的配置文件
     <props>
                    <prop key="insert*">PROPAGATION_REQUIRED,-Exception</prop>
                    <prop key="*">PROPAGATION_REQUIRED,readOnly</prop>
                </props>
    測試結果還是沒有成功,前一句已經在數據庫里了。
    所以大家以后在使用的時候就要注意了,正確的方式是在catch中顯式拋出你在配置文件聲明的異常
    將上面的catch修改成為
    catch(Exception e){
       e.printStackTrace();
                            throw new Exception("回滾");
       }

    這樣就可以回滾上面的更新操作了
    需要注意的是拋出的異常必須跟配置文件中的異常一致,否則不能回滾,或者經過我測試,也可以
    拋出
    UnsupportedOperationException

    則不需要跟配置文件異常相同,可以正常回滾。

    posted on 2009-03-04 16:11 feng 閱讀(3257) 評論(0)  編輯  收藏


    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 曰韩亚洲av人人夜夜澡人人爽 | 亚洲国产精品成人AV在线 | 亚洲国产美女精品久久久| 久草视频在线免费| 拨牐拨牐x8免费| 亚洲国模精品一区| 亚洲人成电影在线天堂| 亚洲国产成人精品激情| 午夜肉伦伦影院久久精品免费看国产一区二区三区 | 亚洲国产成人久久精品影视| 国产精品免费AV片在线观看| 波多野结衣在线免费观看| 免费人成视网站在线观看不卡| 久久九九亚洲精品| 亚洲精品乱码久久久久久蜜桃图片 | 春暖花开亚洲性无区一区二区| 国产亚洲精品免费视频播放| 国产一卡2卡3卡4卡2021免费观看 国产一卡2卡3卡4卡无卡免费视频 | 亚洲国产精品久久久久婷婷软件| 99久在线国内在线播放免费观看| 永久久久免费浮力影院| 午夜亚洲国产理论秋霞| 日本一区二区三区免费高清在线| 免费精品国产自产拍在线观看图片 | 亚洲最大福利视频| 亚洲精品国产精品乱码不卡| 在线播放免费人成毛片乱码| 免费永久国产在线视频| 久久乐国产综合亚洲精品| 久久美女网站免费| 亚洲日产韩国一二三四区| 直接进入免费看黄的网站| 日韩电影免费在线| 亚洲人成网站免费播放| 精品国产无限资源免费观看| 国产精品亚洲精品久久精品| 国产亚洲美日韩AV中文字幕无码成人| 国产成人久久精品亚洲小说| 亚洲网站在线观看| 国产猛烈高潮尖叫视频免费| 亚洲乱码无人区卡1卡2卡3|