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

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

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

    列宿乃施于上榮兮 日月才經于柍桭

    ………… 白駒過隙 歲月如斯 夢縈回繞 心靈之聲
    posts - 57, comments - 8, trackbacks - 0, articles - 41
      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

    Spring中的事務應用

    Posted on 2010-07-04 15:16 默認為零 閱讀(151) 評論(0)  編輯  收藏 所屬分類: 技術

      Spring中的事務管理有聲明式事務和編碼式事務兩種。
      聲明式事務顧名思義就是采用聲明的方式來處理事務。是指在Spring配置文件中聲明式的處理事務來代替代碼式的處理事務。Spring使用AOP來完成聲明式的事務管理,因而聲明式事務是以方法為單位,而事務管理不侵入開發的組件的一種事務處理方式。
      而編碼式事務顯然就是通過應用開發者的事務相關編碼行為完成事務實現的一種處理方式。
     
    聲明式事務

      首先定義事務代理如下:

    <bean id="baseTransactionProxy" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean" abstract="true">
     
    <property name="transactionManager" ref="transactionManager" />
     
    <property name="transactionAttributes">
      
    <props>
       
    <prop key="save*">PROPAGATION_REQUIRED,-Exception</prop>
       
    <prop key="remove*">PROPAGATION_REQUIRED,-Exception</prop>
       
    <prop key="update*">PROPAGATION_REQUIRED,-Exception</prop>
       
    <prop key="query*">PROPAGATION_REQUIRED,readOnly</prop>
      
    </props>
     
    </property>
    </bean>

      key屬性確定代理應該給哪個方法增加事務行為。這樣的屬性最重要的部份是傳播行為。有以下選項可供使用:

      PROPAGATION_REQUIRED--支持當前事務,如果當前沒有事務,就新建一個事務。這是最常見的選擇。 
      PROPAGATION_SUPPORTS--支持當前事務,如果當前沒有事務,就以非事務方式執行。 
      PROPAGATION_MANDATORY--支持當前事務,如果當前沒有事務,就拋出異常。 
      PROPAGATION_REQUIRES_NEW--新建事務,如果當前存在事務,把當前事務掛起。 
      PROPAGATION_NOT_SUPPORTED--以非事務方式執行操作,如果當前存在事務,就把當前事務掛起。 
      PROPAGATION_NEVER--以非事務方式執行,如果當前存在事務,則拋出異常。


      其次對于事務代理的引用:

    <bean id="userManager" parent="baseTransactionProxy">
      
    <property name="target">
       
    <bean class="com.alibaba.xxx.service.impl.UserManagerImpl">
        
    <property name="userDao" ref="userDao" />
        
    <property name="roleDao" ref="roleDao" />
       
    </bean>
      
    </property>
     
    </bean>

      這樣如果UserManagerImpl實現中如果含有save*、remove*、update*、query*的方法名,Spring會自動應用其相應配置的事務實現。

    編碼式事務

    1、TransactionTemplate的事務處理

    TransactionTemplate transactionTemplate = new TransactionTemplate(transactionManager);
     
    //調用transactionTemplate的execute方法進行事務管理
    Object result = transactionTemplate.execute (
    //回調函數實現了TransactionCallback接口的doInTransaction方法
     new TransactionCallback() {
     
    public Object doInTransaction(TransactionStatus status) {
      
    //數據庫操作代碼
      
    //userDao.xxx();
      
    //roleDao.xxx();
      return resultObject;
     }

    }
    );


    2、JdbcTemplate的事務處理

    DefaultTransactionDefinition def = new DefaultTransactionDefinition(); 
    TransactionStatus status 
    = transactionManager.getTransaction(def); 
    try{
     JdbcTemplate jdbcTemplate 
    = new JdbcTemplate(dataSource); 
     jdbcTemplate.update(
    "insert into tbl_user_info values(xx, xx, xx)"); 
    }
     catch (DataAccessException ex) {
     transactionzManager.rollback(status); 
     
    throw ex;
    }
     finally{
     transactionManager.commit(status); 
    }
      編碼式事務還有其他編寫方式,Spring中單數據源的事務其實就是對JDBC的簡單封裝,其操作方式非常類似JDBC的事務應用。

    主站蜘蛛池模板: 免费不卡视频一卡二卡| 免费jjzz在线播放国产| 国产成人免费a在线视频色戒| 亚洲资源在线观看| 特a级免费高清黄色片| 57PAO成人国产永久免费视频| 亚洲爆乳无码专区| caoporn国产精品免费| 免费高清在线爱做视频| 亚洲中字慕日产2021| 免费无码又爽又刺激高潮软件| 免费a在线观看播放| 久久久久国产免费| 欧洲亚洲国产清在高| 毛片免费视频播放| 亚洲一区AV无码少妇电影☆| 精品久久久久亚洲| 好男人视频社区精品免费| 亚洲中文字幕一区精品自拍| 久久精品免费全国观看国产| 国产特黄特色的大片观看免费视频| 亚洲伊人久久综合中文成人网| 一区二区三区AV高清免费波多| 亚洲美女人黄网成人女| 全免费毛片在线播放| 国产免费黄色无码视频| 亚洲欧美乱色情图片| 黄色网址免费大全| 亚洲最大的成人网| 久久亚洲精品视频| 亚洲Av无码乱码在线观看性色 | 亚洲成AⅤ人影院在线观看| 99久久人妻精品免费二区| 黄页网站在线免费观看| 亚洲精品国产综合久久一线| 手机看片国产免费永久| 亚洲欧洲校园自拍都市| 免费高清av一区二区三区| 精品无码AV无码免费专区| 亚洲精品免费网站| 亚洲国产主播精品极品网红 |