最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

簡單了解Spring中的事務(wù)控制

 更新時(shí)間:2019年05月28日 14:35:18   作者:Soarkey  
這篇文章主要介紹了簡單了解Spring中的事務(wù)控制,事務(wù)是一組操作的執(zhí)行單元,下面我們來簡單學(xué)習(xí)一下吧

1.事務(wù)的概念

事務(wù)是一組操作的執(zhí)行單元,相對于數(shù)據(jù)庫的單條操作而言,事務(wù)管理的是一組SQL指令,如增刪改查等,事務(wù)的特性體現(xiàn)在事務(wù)內(nèi)包含的SQL指令必須全部執(zhí)行成功,如果其中一條指令發(fā)生錯(cuò)誤,那么整個(gè)事務(wù)內(nèi)的一組操作都要進(jìn)行回滾。

事務(wù)有四個(gè)特性:

  • 原子性 Atomic ,事務(wù)是一個(gè)不可再拆分的最小單位,要么整個(gè)執(zhí)行,要么整個(gè)回滾.
  • 一致性 Consistent,事務(wù)要保證數(shù)據(jù)庫整體數(shù)據(jù)的完整性和業(yè)務(wù)的數(shù)據(jù)的一致性,事務(wù)成功提交整體數(shù)據(jù)修改,事務(wù)錯(cuò)誤則回滾到數(shù)據(jù)回到原來的狀態(tài)。
  • 隔離性 Isolate,兩個(gè)事務(wù)的執(zhí)行都是獨(dú)立的,事務(wù)之前不會相互影響,多個(gè)事務(wù)操作一個(gè)對象時(shí)會以串行等待的方式保證事務(wù)相互之間處于隔離。
  • 持久性 Durable,一旦事務(wù)成功提交后,數(shù)據(jù)將會保存到數(shù)據(jù)庫,不能再進(jìn)行回滾,以后的操作都將在當(dāng)前數(shù)據(jù)庫狀態(tài)上繼續(xù)進(jìn)行。

2.Spring中的事務(wù)控制方式

編程式事務(wù)管理

通過手動編碼控制事務(wù)的邊界,可以實(shí)現(xiàn)細(xì)粒度的事務(wù)控制,一般用的較少。

聲明式事務(wù)管理

只需要在Spring中添加一些配置文件或者使用注解,即可實(shí)現(xiàn)將操作納入事務(wù)管理中,事務(wù)管理使用了Spring AOP,降低了代碼之間的耦合。

3.事務(wù)管理器

Spring中并沒有直接管理事務(wù),而是將管理事務(wù)委托給相應(yīng)的持久化機(jī)制提供的某個(gè)特定平臺的實(shí)現(xiàn)。

事務(wù)管理器實(shí)現(xiàn) 目標(biāo)
org.springframework.jdbc.datasource.DataSourceTransactionManager 在單一的JDBC Datasource中管理事務(wù)
org.springframework.orm.hibernate5.HibernateTransactionManager 當(dāng)持久化機(jī)制是hibernate時(shí),用它來管理事務(wù)
org.springframework.jdo.JdoTransactionManager 當(dāng)持久化機(jī)制是Jdo時(shí),用它來管理事務(wù)
org.springframework.transaction.jta.JtaTransactionManager 使用一個(gè)JTA實(shí)現(xiàn)來管理事務(wù)。在一個(gè)事務(wù)跨越多個(gè)資源時(shí)必須使用
org.springframework.orm.ojb.PersistenceBrokerTransactionManager 當(dāng)apache的ojb用作持久化機(jī)制時(shí),用它來管理事務(wù)

4.事務(wù)屬性簡介

Spring關(guān)于事務(wù)的注解中有以下幾個(gè)屬性(部分)

@Transactional(
readOnly = false, //讀寫事務(wù)
timeout = -1, //超時(shí)
noRollbackFor = ArithmeticException.class //遇到數(shù)學(xué)異常不回滾
isolation = Isolation.REPEATABLE_READ, //事務(wù)隔離級別
propagation = Propagation.REQUIRED //事務(wù)傳播規(guī)則
)
  • 是否為只讀事務(wù):只讀事務(wù)不做任何修改,可以優(yōu)化查詢操作。
  • 事務(wù)超時(shí)(單位為秒):事務(wù)的最長持續(xù)時(shí)間,如果該時(shí)間內(nèi)事務(wù)一直沒有操作或回滾,則系統(tǒng)將自動進(jìn)行回滾。-1表示不超時(shí),但最終實(shí)現(xiàn)需要由底層數(shù)據(jù)庫實(shí)現(xiàn)。
  • 隔離級別:控制并發(fā)訪問下數(shù)據(jù)庫的安全性。
  • 傳播規(guī)則:定義事務(wù)方法和調(diào)用事務(wù)方法的方法之間的事務(wù)邊界。

5.事務(wù)傳播規(guī)則

傳播行為 意義
REQUIRED 業(yè)務(wù)方法需要在一個(gè)事務(wù)中運(yùn)行。如果方法運(yùn)行時(shí),已經(jīng)處在一個(gè)事務(wù)中,那么加入到該事務(wù),否則為自己創(chuàng)建一個(gè)新的事務(wù)
NOT_SUPPORTED 聲明方法不需要事務(wù)。如果方法沒有關(guān)聯(lián)到一個(gè)事務(wù),容器不會為它開啟事務(wù)。如果方法在一個(gè)事務(wù)中被調(diào)用,該事務(wù)會被掛起,在方法調(diào)用結(jié)束后,原先的事務(wù)便會恢復(fù)執(zhí)行
REQUIRES_NEW 屬性表明不管是否存在事務(wù),業(yè)務(wù)方法總會為自己發(fā)起一個(gè)新的事務(wù)。如果方法已經(jīng)運(yùn)行在一個(gè)事務(wù)中,則原有事務(wù)會被掛起,新的事務(wù)會被創(chuàng)建,直到方法執(zhí)行結(jié)束,新事務(wù)才算結(jié)束,原先的事務(wù)才會恢復(fù)執(zhí)行
MANDATORY 該屬性指定業(yè)務(wù)方法只能在一個(gè)已經(jīng)存在的事務(wù)中執(zhí)行,業(yè)務(wù)方法不能發(fā)起自己的事務(wù)。如果業(yè)務(wù)方法在沒有事務(wù)的環(huán)境下調(diào)用,容器就會拋出異常
SUPPORTS 這一事務(wù)屬性表明,如果業(yè)務(wù)方法在某個(gè)事務(wù)范圍內(nèi)被調(diào)用,則方法成為該事務(wù)的一部分。如果業(yè)務(wù)方法在事務(wù)范圍外被調(diào)用,則方法在沒有事務(wù)的環(huán)境下執(zhí)行
NEVER 指定業(yè)務(wù)方法絕對不能在事務(wù)范圍內(nèi)執(zhí)行。如果業(yè)務(wù)方法在某個(gè)事務(wù)中執(zhí)行,容器會拋出異常,只有業(yè)務(wù)方法沒有關(guān)聯(lián)到任何事務(wù),才能正常執(zhí)行
NESTED 如果一個(gè)活動的事務(wù)存在,則運(yùn)行在一個(gè)嵌套的事務(wù)中. 如果沒有活動事務(wù), 則按REQUIRED屬性執(zhí)行.它使用了一個(gè)單獨(dú)的事務(wù), 這個(gè)事務(wù)擁有多個(gè)可以回滾的保存點(diǎn)。內(nèi)部事務(wù)的回滾不會對外部事務(wù)造成影響。它只對DataSourceTransactionManager事務(wù)管理器起效

6.事務(wù)隔離級別

隔離級別 意義
DEFAULT 默認(rèn)的隔離級別
READ_UNCOMMITED 允許你讀取還未提交的改變了的數(shù)據(jù)??赡軐?dǎo)致臟、幻、不可重復(fù)讀
READ_COMMITTED 允許在并發(fā)事務(wù)已經(jīng)提交后讀取。可防止臟讀,但幻讀和 不可重復(fù)讀仍可發(fā)生
REPEATABLE_READ 對相同字段的多次讀取是一致的,除非數(shù)據(jù)被事務(wù)本身改變。可防止臟、不可重復(fù)讀,但幻讀仍可能發(fā)生
SERIALIZABLE 完全服從事務(wù)ACID的隔離級別,確保不發(fā)生臟、幻、不可重復(fù)讀。這在所有的隔離級別中是最慢的,它是典型的通過完全鎖定在事務(wù)中涉及的數(shù)據(jù)表來完成的

  • 不同的隔離級別采用不同的方式來實(shí)現(xiàn),在四種隔離級別中,Serializable的隔離級別最高,Read Uncommited的隔離級別最低。
  • 大多數(shù)據(jù)庫默認(rèn)的隔離級別為Read Commited,如SqlServer,Oracle
  • 當(dāng)然也有少部分?jǐn)?shù)據(jù)庫默認(rèn)的隔離級別為Repeatable_Read ,如Mysql,
  • Oracle數(shù)據(jù)庫支持READ COMMITTED和SERIALIZABLE兩種事務(wù)隔離性級別,不支持READ UNCOMMITTED和REPEATABLE READ這兩種隔離性級別。雖然SQL標(biāo)準(zhǔn)定義的默認(rèn)事務(wù)隔離性級別是SERIALIZABLE,但是Oracle數(shù)據(jù)庫默認(rèn)使用的事務(wù)隔離性級別卻是READ COMMITTED.

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java實(shí)現(xiàn)圖片合成的示例詳解

    Java實(shí)現(xiàn)圖片合成的示例詳解

    前端有一個(gè)神器——canvas,這個(gè)畫布標(biāo)簽可以處理各種圖片的合成,可以精確到圖片的具體坐標(biāo)。java后端也有這樣的神器,那就是image-combiner,可以很簡單的合成圖片,感興趣的可以試一試
    2022-01-01
  • 并發(fā)編程之Java內(nèi)存模型鎖的內(nèi)存語義

    并發(fā)編程之Java內(nèi)存模型鎖的內(nèi)存語義

    這篇文章主要介紹了并發(fā)編程之Java內(nèi)存模型鎖的內(nèi)存語義,鎖的作用是讓臨界區(qū)互斥執(zhí)行,本文只要圍繞鎖的內(nèi)存語義展開全文內(nèi)容,需要的小伙伴可以參考一下
    2021-11-11
  • SpringBoot中的自定義Banner詳細(xì)解析

    SpringBoot中的自定義Banner詳細(xì)解析

    這篇文章主要介紹了SpringBoot中的自定義Banner詳細(xì)解析,Banner即橫幅標(biāo)語,我們在啟動SpringBoot項(xiàng)目時(shí)會將Banner信息打印至控制臺,我們可以輸出一些圖形、SpringBoot版本信息等內(nèi)容,需要的朋友可以參考下
    2024-01-01
  • Java 多用戶登錄限制的實(shí)現(xiàn)方法

    Java 多用戶登錄限制的實(shí)現(xiàn)方法

    最近沒有事情做,閑的發(fā)呆,于是寫個(gè)東東練練手。這篇文章主要介紹了Java 多用戶登錄限制的實(shí)現(xiàn)方法的相關(guān)資料,需要的朋友可以參考下
    2016-11-11
  • Java Jedis NOAUTH Authentication required問題解決方法

    Java Jedis NOAUTH Authentication required問題解決方法

    這篇文章主要介紹了Java Jedis NOAUTH Authentication required問題解決方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-07-07
  • Java如何獲取文件夾下所有壓縮包下指定文件

    Java如何獲取文件夾下所有壓縮包下指定文件

    在Java中,通過遍歷文件夾并對壓縮包進(jìn)行解析,可以實(shí)現(xiàn)提取指定文件的功能,如文檔、PDF等,該過程中可增加過濾條件來適應(yīng)不同需求,例如文件類型或文件名過濾,該方法適用于處理大量數(shù)據(jù)時(shí)的文件管理和數(shù)據(jù)提取
    2024-09-09
  • Java中的Semaphore信號量使用解析

    Java中的Semaphore信號量使用解析

    這篇文章主要介紹了Java中的Semaphore信號量使用解析,Semaphore 通常我們叫它信號量,可以用來控制同時(shí)訪問特定資源的線程數(shù)量,通過協(xié)調(diào)各個(gè)線程,以保證合理的使用資源,需要的朋友可以參考下
    2023-11-11
  • spring聲明式事務(wù) @Transactional 不回滾的多種情況以及解決方案

    spring聲明式事務(wù) @Transactional 不回滾的多種情況以及解決方案

    本文主要介紹了spring聲明式事務(wù) @Transactional 不回滾的多種情況以及解決方案,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • swing中Tree與滾動條用法實(shí)例分析

    swing中Tree與滾動條用法實(shí)例分析

    這篇文章主要介紹了swing中Tree與滾動條用法,以實(shí)例形式分析了java基于swing實(shí)現(xiàn)圖形界面的使用技巧,需要的朋友可以參考下
    2015-09-09
  • 基于SpringBoot實(shí)現(xiàn)上傳2種方法工程代碼實(shí)例

    基于SpringBoot實(shí)現(xiàn)上傳2種方法工程代碼實(shí)例

    這篇文章主要介紹了基于SpringBoot實(shí)現(xiàn)上傳工程代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-08-08

最新評論

安远县| 盐城市| 东丽区| 西华县| 宁晋县| 永和县| 河曲县| 阿克| 凌源市| 桑植县| 雅安市| 信阳市| 舞阳县| 连云港市| 阆中市| 炉霍县| 平南县| 宁明县| 松溪县| 页游| 灵丘县| 汉中市| 丹棱县| 穆棱市| 合水县| 临清市| 北宁市| 兴文县| 邮箱| 望城县| 临漳县| 扶沟县| 秀山| 江陵县| 裕民县| 项城市| 当雄县| 岱山县| 碌曲县| 当涂县| 南雄市|