成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Spring事務(wù)管理

TalkingData / 1172人閱讀

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

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

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

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

當(dāng)事務(wù)方法被另一個事務(wù)方法調(diào)用時,必須指定事務(wù)應(yīng)該如何傳播。

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

總結(jié)下就是:

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

Spring事務(wù)管理的兩種方式
編程式事務(wù)管理

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

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

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

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

聲明式事務(wù)管理,不需要改動目標(biāo)代碼,靈活性更強(qiáng),更便于使用。

Spring事務(wù)配置

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

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

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

1. 每個Bean都有一個代理



      
          
        
      

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



      
          
        
      

      
    
        
    
    
      
          
          
          
          
              
                PROPAGATION_REQUIRED  
              
          
        
   
    
    
        
    
    
      
           
    
3. 使用攔截器



      
          
        
      

      
    
        
     
   
      
          
          
          
              
                PROPAGATION_REQUIRED  
              
          
    
      
      
          
              
                *Dao
              
          
          
              
                transactionInterceptor  
              
          
      
  
    
    
        
    
4. 使用tx標(biāo)簽配置的攔截器



    
    

      
          
        
      

      
    
        
    

    
        
            
        
    
    
    
        
                
          
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...

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

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/70311.html

相關(guān)文章

  • 15個經(jīng)典的Spring面試常見問題

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

    sarva 評論0 收藏0
  • Spring學(xué)習(xí)筆記

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

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

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

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

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

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

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

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

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

    ckllj 評論0 收藏0

發(fā)表評論

0條評論

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