国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Spring事務管理

TalkingData / 1167人閱讀

摘要:事務的傳播行為當事務方法被另一個事務方法調用時,必須指定事務應該如何傳播。事務配置配置文件中關于事務配置總是由三個組成部分,分別是和代理機制這三部分,無論哪種配置方式,一般變化的只是代理機制這部分。

數(shù)據(jù)庫事務的隔離級別

數(shù)據(jù)庫事務的隔離級別有4個,由低到高依次為Read uncommittedRead committedRepeatable readSerializable

? 臟讀 不可重復讀 幻讀
Read uncommitted
Read committed ×
Repeatable read × ×
Serializable × × ×
臟讀 一個事務讀取到了另一個事務改寫但未提交的數(shù)據(jù),如果這些數(shù)據(jù)被回滾,則讀到的數(shù)據(jù)是無效的
不可重復讀 在同一個事務中,多次讀取同一數(shù)據(jù)返回的結果不同。也就是說,后續(xù)讀取可以讀到另一事務已提交的更新數(shù)據(jù)
幻讀 幻讀是指當事務不是獨立執(zhí)行時發(fā)生的一種現(xiàn)象,例如第一個事務對一個表中的數(shù)據(jù)進行了修改,這種修改涉及到表中的全部數(shù)據(jù)行。同時,第二個事務也修改這個表中的數(shù)據(jù),這種修改是向表中插入一行新數(shù)據(jù)。那么,以后就會發(fā)生操作第一個事務的用戶發(fā)現(xiàn)表中還有沒有修改的數(shù)據(jù)行,就好象發(fā)生了幻覺一樣。
事務的傳播行為

當事務方法被另一個事務方法調用時,必須指定事務應該如何傳播。

事務傳播行為類型 說明
PROPAGATION_REQUIRED 支持當前事務,如果不存在,就創(chuàng)建一個(默認的傳播行為)
PROPAGATION_SUPPORTS 支持當前事務,如果不存在,就不使用事務
PROPAGATION_MANDATORY 支持當前事務,如果不存在,就拋出異常
PROPAGATION_REQUIRES_NEW 如果有事務存在,掛起當前事務,創(chuàng)建一個新的事務
PROPAGATION_NOT_SUPPORTED 以非事務方式運行,如果有事務存在,掛起當前事務
PROPAGATION_NEVER 以非事務方式運行, 如果有事務存在,拋出異常
PROPAGATION_NESTED 如果當前事務存在,就嵌套事務執(zhí)行(只對DataSourceTransactionManager起效)

總結下就是:

支持當前事務: REQUIRED、SUPPORTS、MANDATORY (刪除訂單、刪除用戶 )
不支持當前事務:REQUIRES_NEW、NOT_SUPPORTED、NEVER (ATM取款、打印憑條 )
嵌套事務:NESTED ,使用Jdbc Connection SavePoint技術,允許在事務過程中回滾到某個保存點,只對DataSourceTransactionManager 有效

Spring事務管理的兩種方式
編程式事務管理

在程序代碼中,加入事務管理代碼,有代碼侵入事務管理方式 ,現(xiàn)在很少使用,不方便,靈活性較差
1)在spring 配置TransactionManager 事務管理器
2)將TransactionManager對象 注入 TransactionTemplate對象
3)將TransactionTemplate對象 注入 應用代碼中
4)添加事務控制

transactionTemplate.execute(new TransactionCallbackWithoutResult(){
    doInTransaction(){
        //添加被事務管理的代碼 
    }
});
聲明式事務管理

底層原因,使用Spring AOP 思想,環(huán)繞通知增強,在不修改源目標代碼情況下,動態(tài)添加功能增強

try {
    //開啟事務
    //被事務管理代碼
    //提交事務
}catch{
    //回滾事務
}

聲明式事務管理,不需要改動目標代碼,靈活性更強,更便于使用。

Spring事務配置

Spring配置文件中關于事務配置總是由三個組成部分,分別是DataSource、TransactionManager和代理機制這三部分,無論哪種配置方式,一般變化的只是代理機制這部分。

DataSource、TransactionManager這兩部分只是會根據(jù)數(shù)據(jù)訪問方式有所變化,比如使用hibernate進行數(shù)據(jù)訪問時,DataSource實際為SessionFactory,TransactionManager的實現(xiàn)為HibernateTransactionManager。參考下圖

根據(jù)代理機制的不同,共有5中配置方式

1. 每個Bean都有一個代理



      
          
        
      

      
    
        
    
    
    
    
        
    
    
      
             
                
          
         
          
          
              
                PROPAGATION_REQUIRED
              
          
      
2. 所有Bean共享一個代理基類



      
          
        
      

      
    
        
    
    
      
          
          
          
          
              
                PROPAGATION_REQUIRED  
              
          
        
   
    
    
        
    
    
      
           
    
3. 使用攔截器



      
          
        
      

      
    
        
     
   
      
          
          
          
              
                PROPAGATION_REQUIRED  
              
          
    
      
      
          
              
                *Dao
              
          
          
              
                transactionInterceptor  
              
          
      
  
    
    
        
    
4. 使用tx標簽配置的攔截器



    
    

      
          
        
      

      
    
        
    

    
        
            
        
    
    
    
        
                
          
5. 使用全注解



    
    

    

      
          
        
      

      
    
        
    
    

此時在DAO上需加上@Transactional注解,如下:

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();
    }
    
    
}

http://singo107.iteye.com/blo...
http://blog.csdn.net/it_man/a...

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/70311.html

相關文章

  • 15個經典的Spring面試常見問題

    摘要:我自己總結的學習的系統(tǒng)知識點以及面試問題,已經開源,目前已經。目前最新的版本中模塊的組件已經被廢棄掉,同時增加了用于異步響應式處理的組件。每一次請求都會產生一個新的,該僅在當前內有效。顯而易見,這種模式存在很多問題。 我自己總結的Java學習的系統(tǒng)知識點以及面試問題,已經開源,目前已經 41k+ Star。會一直完善下去,歡迎建議和指導,同時也歡迎Star: https://githu...

    sarva 評論0 收藏0
  • Spring學習筆記

    摘要:介紹并不局限于某一層是對象的容器幫我們管理項目中的所有對象搭建導包直接新建項目,一般的都有,除了依賴準備類書寫配置書寫代碼測試中的概念反轉控制創(chuàng)建對象的方式反轉了從我們自己創(chuàng)建對象反轉給程序來創(chuàng)建依賴注入將必須的屬性注入到對象當中是實現(xiàn)思想 1.spring介紹 spring并不局限于某一層.spring是對象的容器,幫我們管理項目中的所有對象 2.spring搭建 1.導包(idea...

    FleyX 評論0 收藏0
  • Spring框架之我見(三)——IOC、AOP

    摘要:模塊負責的所有面向切面的功能。總結的統(tǒng)一管理,降低了對象之間的耦合對主流的框架提供了很好的集成支持提供眾多組件,事務管理,等具有高度可開放性,開發(fā)者可以自由選擇部分或全部主要使用工廠模式和代理模式。 聊完了Spring框架中最重要的兩種設計模式,我們來看一下Spring框架的模塊和結構圖。 Spring框架的結構 下圖是Spring官方給出的Spring框架的結構圖。 showImg(...

    khs1994 評論0 收藏0
  • Spring筆記04_AOP注解開發(fā)_模板_事務

    摘要:后置增強周杰倫環(huán)繞通知在切面類中添加以下方法環(huán)繞通知環(huán)繞前增強環(huán)繞前增強測試前置增強保存訂單。。。不使用事務管理。 1. Spring基于AspectJ的注解的AOP開發(fā) 1. 1 SpringAOP的注解入門 創(chuàng)建項目,導入jar包 需要導入Spring基礎包4+2 需要導入AOP聯(lián)盟包、AspectJ包、Spring整合Aspect包Spring-aop包 Spring整合單...

    youkede 評論0 收藏0
  • Spring Boot 參考指南(使用JTA分布式事務

    摘要:使用事務管理器是支持的一個流行的開源事務管理器實現(xiàn),你可以使用啟動器向項目添加適當?shù)囊蕾図棧c和一樣,將自動配置并對進行后處理,以確保啟動和關閉順序是正確的。 37. 用JTA分布式事務 通過使用Atomikos或Bitronix嵌入式事務管理器,Spring Boot支持跨多個XA資源的分布式JTA事務,在部署到合適的Java EE應用服務器時也支持JTA事務。 當檢測到JTA環(huán)境時...

    silenceboy 評論0 收藏0
  • MyBatis集成Spring

    摘要:各方面有各種常見的良好示例,包括日志記錄,聲明式事務,安全性,緩存等。聲明式事務管理這意味著你從業(yè)務代碼中分離事務管理。但作為一種橫切關注點,聲明式事務管理可以使用方法進行模塊化。支持使用框架的聲明式事務管理。 本章主要內容包括Spring簡介、Spring的兩大特性(IOC和AOP)、事務MyBatis集成Spring等。也許有讀者會疑惑,明明是MyBatis-Plus實戰(zhàn),怎么還講...

    ckllj 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<