面試經歷(二)

前面說到用數據庫中的鎖機制對并發事務進行控制,這節來說說事務方法和事務方法發生嵌套調用時事務如何進行傳播。例如:方法可能繼續在現有事務中運行,也可能開啟一個新事務,并在自己的事務中運行。例如:方法可能繼續在現有事務中運行,也可能開啟一個新事務,并在自己的事務中運行。Spring定義了七種傳播行為:

傳播行為

含義

PROPAGATION_REQUIRED

表示當前方法必須運行在事務中。如果當前事務存在,方法將會在該事務中運行。否則,會啟動一個新的事務

PROPAGATION_SUPPORTS

表示當前方法不需要事務上下文,但是如果存在當前事務的話,那么該方法會在這個事務中運行

PROPAGATION_MANDATORY

表示該方法必須在事務中運行,如果當前事務不存在,則會拋出一個異常

PROPAGATION_REQUIRED_NEW

表示當前方法必須運行在它自己的事務中。一個新的事務將被啟動。如果存在當前事務,在該方法執行期間,當前事務會被掛起。

PROPAGATION_NOT_SUPPORTED

表示該方法不應該運行在事務中。如果存在當前事務,在該方法運行期間,當前事務將被掛起。

PROPAGATION_NEVER

表示當前方法不應該運行在事務上下文中。如果當前正有一個事務在運行,則會拋出異常

PROPAGATION_NESTED

表示如果當前已經存在一個事務,那么該方法將會在嵌套事務中運行。嵌套的事務可以獨立于當前事務進行單獨地提交或回滾。如果當前事務不存在,那么其行為與PROPAGATION_REQUIRED一樣。

一個事務中會有多個dao層接口需要與數據庫建立連接存取數據,那就需要保證這些dao操作調用的都是一個connection對象,這樣才能保證事務執行的正確性。那這又是如何保證的呢?

源碼比較多,等有時間再慢慢分析!簡單說就是:

(1)TransactionSynchronizationManager內部用ThreadLocal對象存儲資源,ThreadLocal存儲的為DataSource生成的actualKey為key值和ConnectionHolder作為value值封裝成的Map。

(2) 結合DataSourceUtils的doGetConnection函數和TransactionSynchronizationManager的bindResource函數可知:在某個線程第一次調用時候,封裝Map資源為:key值為DataSource生成actualKey【Object actualKey = TransactionSynchronizationUtils.unwrapResourceIfNecessary(key);】value值為DataSource獲得的Connection對象封裝后的ConnectionHolder。等這個線程下一次再次訪問中就能保證使用的是第一次創建的ConnectionHolder中的Connection對象。

說了事務的傳播屬性、隔離規則,順著這條線說說Spring的事務管理,先看下Spring事務管理的接口框架。

20160324011156424 Spring并不直接管理事務,而是提供了多種事務管理器,他們將事務管理的職責委托給hibernate或者JTA等持久化機制所提供的相關平臺框架的事務來實現。

前面介紹了事務隔離規則、傳播特性,那么事務中還有那些特性?

20160325003448793

事務超時

為了使應用程序很好地運行,事務不能運行太長的時間。因為事務可能涉及對后端數據庫的鎖定,所以長時間的事務會不必要的占用數據庫資源。事務超時就是事務的一個定時器,在特定時間內事務如果沒有執行完畢,那么就會自動回滾,而不是一直等待其結束。

回滾規則

事務五邊形的最后一個方面是一組規則,這些規則定義了哪些異常會導致事務回滾而哪些不會。默認情況下,事務只有遇到運行期異常時才會回滾,而在遇到檢查型異常時不會回滾。但是你可以聲明事務在遇到特定的檢查型異常時像遇到運行期異常那樣回滾。同樣,你還可以聲明事務遇到特定的異常不回滾,即使這些異常是運行期異常。

只讀

事務的第三個特性是它是否為只讀事務。如果事務只對后端的數據庫進行該操作,數據庫可以利用事務的只讀特性來進行一些特定的優化。通過將事務設置為只讀,你就可以給數據庫一個機會,讓它應用它認為合適的優化措施。

編程式和聲明式事務

Spring提供了對編程式事務和聲明式事務的支持,編程式事務允許用戶在代碼中精確定義事務的邊界,而聲明式事務(基于AOP)有助于用戶將操作與事務規則進行解耦。
簡單地說,編程式事務侵入到了業務代碼里面,但是提供了更加詳細的事務管理;而聲明式事務由于基于AOP,所以既能起到事務管理的作用,又可以不影響業務代碼的具體實現。

以上有的并沒有實際的開發經歷,所以感受不是很深,先作為一個了解吧!

轉載于:https://www.cnblogs.com/linyukun/p/9892523.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/450854.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/450854.shtml
英文地址,請注明出處:http://en.pswp.cn/news/450854.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

最有價值的編程忠告

摘要:本文是來自貝爾實驗室Plan 9操作系統的創始人Rob Pike給大家分享的編程忠告!Rob Pike,目前谷歌公司最著名的軟件工程師之一,曾是貝爾實驗室Unix開發團隊成員,締造Go語言和Limbo語言的核心人物。 Rob Pike&#xf…

Column count doesn't match value count at row 1 原因

mysql 提示 : Column count doesnt match value count at row 1錯誤,SQL語句中列的個數和值的個數不等, 如: insert into table1 (field1,field2) values(值1,值2,值3 ) 列只有2個,值 卻有3個…

MarkDowm快捷鍵大全

文章目錄一:菜單欄二:文件三:編輯四:段落五:格式六:視圖一:菜單欄 文件:altF 編輯:altE 段落:altP 格式:altO 視圖:altV 主題&#x…

Kinect2.0-空間長度測量

1. 鼠標左鍵按下選擇起點,拖動鼠標,左鍵放開,確定終點。 實現效果1實現效果22. 在linux下使用libfreenect2開源多平臺驅動來獲取kinect2.0的傳感器信息,得到深度信息,并通過libfreenect2提供的getPointXYZ函數&#xf…

帶數據庫的智能合約

編寫使用數據庫的智能合約 前面一直在搗鼓EOS網絡搭建的相關東西。然而今天比較不走運的是,興致勃勃的把源碼版本升到4.0,在編譯的時候如我所猜想的出現了一系列問題,正一籌莫展的時候,導師突然問了我一個關于合約如何操作數據庫的…

沒有完美的軟件:編程永遠不容易

摘要:很多人想用十全十美來修飾一樣東西,比如軟件,對于客戶來說,當然希望他們的軟件能做到完美。雖然很多專家說利用一些規范可以讓軟件達到更好!但是在現實開發中,真的會有那么完美的軟件嗎? 最…

Eclipse斷點調試出現Source not found

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 我的情況是和網上說的都不一樣,我真的也沒有想到這么坑, 我居然無意寫了一個死循環,dao/mapper調sql…

Memory Compression這到底是個什么東西?

Memory Compression這到底是個什么東西? Memory Compression這個進程,經過我的查詢說是內存壓縮功能,作用是壓縮內存讓內存占用更低,但是為什么這個進程瘋狂占用我的內存,我用的Win10 8G,通過資源監視器查看…

MySQL 5.6 for Windows 解壓縮版配置安裝

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 MySQL是一個小巧玲瓏但功能強大的數據庫,目前十分流行。但是官網給出的安裝包有兩種格式,一個是msi格式&#xf…

safari的一些問題

1、圖片過大時,在webview中是不會加載顯示的。2、如果是通過一個地址返回的base64數據給image,記住要在后臺進行base64_decode解析數據,這樣才是真實的圖片數據,后臺保存數據的時候不要保存"data:image/png;base64,"這一…

代碼審查“思維導圖”

摘要:隨著人們對軟件質量要求的不斷提高,軟件開發的每一個環節都應該得到十足的重視,俗話說:“細節決定成敗”,就此,本文提供了一個代碼審查“思維導圖”,希望對所有碼農們有所幫助。 代碼審查&…

thinkCMF----導航高亮顯示

導航高亮顯示&#xff0c;有多種方法&#xff0c;這里給出一個簡單的表示下&#xff1a; <a href"__ROOT__"><span class"text db">網站首頁</span><span class"eng db">HOME</span> </a> …

The absolute uri: http://java.sun.com/jsp/jstl/core cannot be resolved in either web.xml or the jar

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 tomcat啟動報務后訪問頁面報錯&#xff1a; org.apache.jasper.JasperException: The absolute uri: http://java.sun.com/jsp/jstl/co…

優秀程序員和一般程序員差別在哪?

摘要&#xff1a;在這個世界上有兩種程序員&#xff1a;Day Programmers&#xff08;白班程序員&#xff09;和Night Programmers&#xff08;夜貓子程序員&#xff09;&#xff0c;你知道優秀程序員和一般程序員有哪些差別嗎&#xff1f;你又是哪一類型的呢&#xff1f;俗話說…

7. Oracle數據加載和卸載

在日常工作中&#xff1b;經常會遇到這樣的需求&#xff1a; Oracle 數據表跟文本或者文件格式進行交互&#xff1b;即將指定文件內容導入對應的 Oracle 數據表中&#xff1b;或者從 Oracle 數據表導出。其他數據庫中的表跟Oracle數據庫進行交互。若是少量數據&#xff1b;可選…

Navicat工具導出mySQL數據庫某個視圖結構的.sql腳本

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 用Navicat工具怎么都導不出來mySQL數據庫的某個視圖.sql腳本&#xff0c;即使導出來也只是包含視圖記錄&#xff0c;不包含視圖結構。經…

瞧瞧蘋果OS X如何干掉Linux

摘要&#xff1a;如果你去過Facebook或者其它一些創業類科技公司&#xff0c;你會發現隨處可見的Mac&#xff0c;無論是CEO還是開發者&#xff0c;都可能在使用Mac。而以往很受IT人士青睞的Linux好像在消失&#xff0c;這是真的嗎&#xff1f;蘋果OS X是如何干掉Linux的&#x…

超全十大經典排序算法及其分析

文章目錄0.算法概述0.1 算法分類0.2 算法復雜度0.3 相關概念1. 冒泡排序&#xff08;Bubble Sort&#xff09;1.1 算法描述&#xff1a;1.2 圖解演示1.3 代碼實現1.4 優化過程1.5 性能分析2. 選擇排序&#xff08;Selection Sort&#xff09;2.1 算法描述&#xff1a;2.2 圖解演…

eclipse安裝JAVA反編譯插件

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 前言&#xff1a;在實際的開發中幾乎都會使用到一些框架來輔助項目的開發工作&#xff0c;對于一些框架的代碼我們總懷有一些好奇之心&a…

noip2014生活大爆炸版石頭剪刀布

題目描述 石頭剪刀布是常見的猜拳游戲:石頭勝剪刀,剪刀勝布,布勝石頭。如果兩個人出拳一 樣&#xff0c;則不分勝負。在《生活大爆炸》第二季第8集中出現了一種石頭剪刀布的升級版游戲。 升級版游戲在傳統的石頭剪刀布游戲的基礎上,增加了兩個新手勢: 斯波克:《星際迷航》主角之…