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

簡單了解Spring中的事務控制

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

1.事務的概念

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

事務有四個特性:

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

2.Spring中的事務控制方式

編程式事務管理

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

聲明式事務管理

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

3.事務管理器

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

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

4.事務屬性簡介

Spring關于事務的注解中有以下幾個屬性(部分)

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

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

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

6.事務隔離級別

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

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

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • IDEA安裝后找不到.vmoptions文件的問題及解決

    IDEA安裝后找不到.vmoptions文件的問題及解決

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

    SpringBoot處理 CORS 跨域的方法詳解

    Springboot跨域問題,是當前主流web開發(fā)人員都繞不開的難題,CORS是一個W3C標準,全稱是”跨域資源共享”,本文將給大家詳細介紹SpringBoot 如何處理 CORS 跨域,感興趣的同學跟著小編一起來看看吧
    2023-07-07
  • Java實現(xiàn)文件名倒序排序的技術指南

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

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

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

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

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

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

    maven+阿里云創(chuàng)建國內鏡像的中央倉庫(親測可用)

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

    Hibernate單表操作實例解析

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

    SpringBoot通過自定義注解與異步來管理日志流程

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

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

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

    java頁面中文亂碼的解決辦法

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

最新評論