欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

1.事務(wù)的概念

事務(wù)是一組操作的執(zhí)行單元,相對(duì)于數(shù)據(jù)庫(kù)的單條操作而言,事務(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ù)庫(kù)整體數(shù)據(jù)的完整性和業(yè)務(wù)的數(shù)據(jù)的一致性,事務(wù)成功提交整體數(shù)據(jù)修改,事務(wù)錯(cuò)誤則回滾到數(shù)據(jù)回到原來(lái)的狀態(tài)。
  • 隔離性 Isolate,兩個(gè)事務(wù)的執(zhí)行都是獨(dú)立的,事務(wù)之前不會(huì)相互影響,多個(gè)事務(wù)操作一個(gè)對(duì)象時(shí)會(huì)以串行等待的方式保證事務(wù)相互之間處于隔離。
  • 持久性 Durable,一旦事務(wù)成功提交后,數(shù)據(jù)將會(huì)保存到數(shù)據(jù)庫(kù),不能再進(jìn)行回滾,以后的操作都將在當(dāng)前數(shù)據(jù)庫(kù)狀態(tài)上繼續(xù)進(jìn)行。

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

編程式事務(wù)管理

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

聲明式事務(wù)管理

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

3.事務(wù)管理器

Spring中并沒(méi)有直接管理事務(wù),而是將管理事務(wù)委托給相應(yīng)的持久化機(jī)制提供的某個(gè)特定平臺(tái)的實(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í),用它來(lái)管理事務(wù)
org.springframework.jdo.JdoTransactionManager 當(dāng)持久化機(jī)制是Jdo時(shí),用它來(lái)管理事務(wù)
org.springframework.transaction.jta.JtaTransactionManager 使用一個(gè)JTA實(shí)現(xiàn)來(lái)管理事務(wù)。在一個(gè)事務(wù)跨越多個(gè)資源時(shí)必須使用
org.springframework.orm.ojb.PersistenceBrokerTransactionManager 當(dāng)apache的ojb用作持久化機(jī)制時(shí),用它來(lái)管理事務(wù)

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

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

@Transactional(
readOnly = false, //讀寫(xiě)事務(wù)
timeout = -1, //超時(shí)
noRollbackFor = ArithmeticException.class //遇到數(shù)學(xué)異常不回滾
isolation = Isolation.REPEATABLE_READ, //事務(wù)隔離級(jí)別
propagation = Propagation.REQUIRED //事務(wù)傳播規(guī)則
)
  • 是否為只讀事務(wù):只讀事務(wù)不做任何修改,可以優(yōu)化查詢操作。
  • 事務(wù)超時(shí)(單位為秒):事務(wù)的最長(zhǎng)持續(xù)時(shí)間,如果該時(shí)間內(nèi)事務(wù)一直沒(méi)有操作或回滾,則系統(tǒng)將自動(dòng)進(jìn)行回滾。-1表示不超時(shí),但最終實(shí)現(xiàn)需要由底層數(shù)據(jù)庫(kù)實(shí)現(xiàn)。
  • 隔離級(jí)別:控制并發(fā)訪問(wèn)下數(shù)據(jù)庫(kù)的安全性。
  • 傳播規(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ù)。如果方法沒(méi)有關(guān)聯(lián)到一個(gè)事務(wù),容器不會(huì)為它開(kāi)啟事務(wù)。如果方法在一個(gè)事務(wù)中被調(diào)用,該事務(wù)會(huì)被掛起,在方法調(diào)用結(jié)束后,原先的事務(wù)便會(huì)恢復(fù)執(zhí)行
REQUIRES_NEW 屬性表明不管是否存在事務(wù),業(yè)務(wù)方法總會(huì)為自己發(fā)起一個(gè)新的事務(wù)。如果方法已經(jīng)運(yùn)行在一個(gè)事務(wù)中,則原有事務(wù)會(huì)被掛起,新的事務(wù)會(huì)被創(chuàng)建,直到方法執(zhí)行結(jié)束,新事務(wù)才算結(jié)束,原先的事務(wù)才會(huì)恢復(fù)執(zhí)行
MANDATORY 該屬性指定業(yè)務(wù)方法只能在一個(gè)已經(jīng)存在的事務(wù)中執(zhí)行,業(yè)務(wù)方法不能發(fā)起自己的事務(wù)。如果業(yè)務(wù)方法在沒(méi)有事務(wù)的環(huán)境下調(diào)用,容器就會(huì)拋出異常
SUPPORTS 這一事務(wù)屬性表明,如果業(yè)務(wù)方法在某個(gè)事務(wù)范圍內(nèi)被調(diào)用,則方法成為該事務(wù)的一部分。如果業(yè)務(wù)方法在事務(wù)范圍外被調(diào)用,則方法在沒(méi)有事務(wù)的環(huán)境下執(zhí)行
NEVER 指定業(yè)務(wù)方法絕對(duì)不能在事務(wù)范圍內(nèi)執(zhí)行。如果業(yè)務(wù)方法在某個(gè)事務(wù)中執(zhí)行,容器會(huì)拋出異常,只有業(yè)務(wù)方法沒(méi)有關(guān)聯(lián)到任何事務(wù),才能正常執(zhí)行
NESTED 如果一個(gè)活動(dòng)的事務(wù)存在,則運(yùn)行在一個(gè)嵌套的事務(wù)中. 如果沒(méi)有活動(dòng)事務(wù), 則按REQUIRED屬性執(zhí)行.它使用了一個(gè)單獨(dú)的事務(wù), 這個(gè)事務(wù)擁有多個(gè)可以回滾的保存點(diǎn)。內(nèi)部事務(wù)的回滾不會(huì)對(duì)外部事務(wù)造成影響。它只對(duì)DataSourceTransactionManager事務(wù)管理器起效

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

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

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

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

相關(guān)文章

  • IDEA安裝后找不到.vmoptions文件的問(wèn)題及解決

    IDEA安裝后找不到.vmoptions文件的問(wèn)題及解決

    這篇文章主要介紹了IDEA安裝后找不到.vmoptions文件的問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-04-04
  • SpringBoot處理 CORS 跨域的方法詳解

    SpringBoot處理 CORS 跨域的方法詳解

    Springboot跨域問(wèn)題,是當(dāng)前主流web開(kāi)發(fā)人員都繞不開(kāi)的難題,CORS是一個(gè)W3C標(biāo)準(zhǔn),全稱(chēng)是”跨域資源共享”,本文將給大家詳細(xì)介紹SpringBoot 如何處理 CORS 跨域,感興趣的同學(xué)跟著小編一起來(lái)看看吧
    2023-07-07
  • Java實(shí)現(xiàn)文件名倒序排序的技術(shù)指南

    Java實(shí)現(xiàn)文件名倒序排序的技術(shù)指南

    在實(shí)際開(kāi)發(fā)過(guò)程中,我們經(jīng)常需要對(duì)文件進(jìn)行操作和處理,一個(gè)常見(jiàn)的需求是按文件名倒序排列文件列表,以便于文件的管理和查找,本文將介紹如何在Java中實(shí)現(xiàn)文件名倒序排序,并提供詳細(xì)的代碼案例,需要的朋友可以參考下
    2024-08-08
  • 一文徹底理清SpringBoot CURD處理邏輯、順序

    一文徹底理清SpringBoot CURD處理邏輯、順序

    這篇文章主要給大家介紹了關(guān)于如何一文徹底理清SpringBoot CURD處理邏輯、順序的相關(guān)資料,CURD是一個(gè)數(shù)據(jù)庫(kù)技術(shù)中的縮寫(xiě)詞,一般的項(xiàng)目開(kāi)發(fā)的各種參數(shù)的基本功能都是CURD,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-10-10
  • linux下idea、pycharm等輸入中文拼音時(shí)滿3個(gè)字母后無(wú)法繼續(xù)拼音輸入的問(wèn)題

    linux下idea、pycharm等輸入中文拼音時(shí)滿3個(gè)字母后無(wú)法繼續(xù)拼音輸入的問(wèn)題

    這篇文章主要介紹了linux下idea、pycharm等輸入中文拼音時(shí)滿3個(gè)字母后無(wú)法繼續(xù)拼音輸入的問(wèn)題,本文通過(guò)圖文并茂的形式給大家分享解決方法,需要的朋友可以參考下
    2021-04-04
  • maven+阿里云創(chuàng)建國(guó)內(nèi)鏡像的中央倉(cāng)庫(kù)(親測(cè)可用)

    maven+阿里云創(chuàng)建國(guó)內(nèi)鏡像的中央倉(cāng)庫(kù)(親測(cè)可用)

    本篇文章主要介紹了maven+阿里云創(chuàng)建國(guó)內(nèi)鏡像的中央倉(cāng)庫(kù)(親測(cè)可用),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-12-12
  • Hibernate單表操作實(shí)例解析

    Hibernate單表操作實(shí)例解析

    這篇文章主要介紹了Hibernate單表操作實(shí)例解析,分享了相關(guān)代碼示例,小編覺(jué)得還是挺不錯(cuò)的,具有一定借鑒價(jià)值,需要的朋友可以參考下
    2018-02-02
  • SpringBoot通過(guò)自定義注解與異步來(lái)管理日志流程

    SpringBoot通過(guò)自定義注解與異步來(lái)管理日志流程

    實(shí)現(xiàn)日志管理說(shuō)實(shí)話方式還挺多,個(gè)人使用過(guò)直接在Controller代碼里面寫(xiě)、AOP+自定義注解、ConstraintValidator。本文主要和大家講的是自定義注解與異步來(lái)管理日志流程,感興趣的可以了解一下
    2023-03-03
  • 深入分析Android系統(tǒng)中SparseArray的源碼

    深入分析Android系統(tǒng)中SparseArray的源碼

    這篇文章主要介紹了深入分析Android系統(tǒng)中SparseArray的源碼,SparseArray為Java實(shí)現(xiàn),需要的朋友可以參考下
    2015-07-07
  • java頁(yè)面中文亂碼的解決辦法

    java頁(yè)面中文亂碼的解決辦法

    做java開(kāi)發(fā)的朋友碰到最多的就是中文亂碼這個(gè)問(wèn)題了,下面介紹頁(yè)面提交時(shí)與url中文亂碼的一些解決辦法
    2013-11-11

最新評(píng)論