1. 程式人生 > >spring事務學習總結

spring事務學習總結

spring事務 

1.主要有三個介面:PlatformTransactionManager(全域性事務管理器)、TransactionDefinition(事務配置相關,如隔離、只讀、傳播、超時、異常回滾等)、TransactionStatus(有查詢事務狀態的相關方法,如isNewTransaction、isRollBackOnly等)。

2.Spring事務的隔離級別
 1. ISOLATION_DEFAULT: 這是一個PlatfromTransactionManager預設的隔離級別,使用資料庫預設的事務隔離級別.hibernate預設為REPEATABLE_READ、oracle預設為READ_COMMITTED;
      另外四個與JDBC的隔離級別相對應
 2. ISOLATION_READ_UNCOMMITTED: 這是事務最低的隔離級別,它充許令外一個事務可以看到這個事務未提交的資料。
      這種隔離級別會產生髒讀,不可重複讀和幻像讀。
 3. ISOLATION_READ_COMMITTED: 保證一個事務修改的資料提交後才能被另外一個事務讀取。另外一個事務不能讀取該事務未提交的資料
 4. ISOLATION_REPEATABLE_READ: 這種事務隔離級別可以防止髒讀,不可重複讀。但是可能出現幻像讀。
      它除了保證一個事務不能讀取另一個事務未提交的資料外,還保證了避免下面的情況產生(不可重複讀)。
 5. ISOLATION_SERIALIZABLE(序列化,事務只能排隊進行,不能並行) 這是花費最高代價但是最可靠的事務隔離級別。事務被處理為順序執行。
      除了防止髒讀,不可重複讀外,還避免了幻像讀。

3.spring事務的傳播級別Propagation :

有以下選項可供使用(標紅為常用):

PROPAGATION_REQUIRED--支援當前事務,如果當前沒有事務,就新建一個事務。這是最常見的選擇。
PROPAGATION_SUPPORTS--支援當前事務,如果當前沒有事務,就以非事務方式執行。
PROPAGATION_MANDATORY--支援當前事務,如果當前沒有事務,就丟擲異常。
PROPAGATION_REQUIRES_NEW--新建事務,如果當前存在事務,把當前事務掛起。
PROPAGATION_NOT_SUPPORTED--以非事務方式執行操作,如果當前存在事務,就把當前事務掛起。
PROPAGATION_NEVER--以非事務方式執行,如果當前存在事務,則丟擲異常。
PROPAGATION_NESTED--支援當前事務,建立新事務,方法在巢狀事務裡執行;無當前事務,建立新事務並和REQUIRED相同。

4.實現spring事物有兩種方式:程式設計式和宣告式

(1)程式設計式

    程式設計式可以在業務邏輯類上注入xml中配置的TransactionTemplate類;在業務邏輯類中呼叫TransactionTemplate.execute(new TransactionCallbackWithoutResult(){ });

把需要控制的事物內容放進去即可;

(2)宣告式

     1.TransactionProxyFactoryBean代理類配置事物代理bean,一般不推薦,只能一一對應。

     2.xml中配置aop。

 <tx:advice id="txAdvice" transaction-manager="transactionManager">
       <tx:attributes>
          <!-- 所有以get開頭的方法都是隻讀的 -->
          <tx:method name="get*" read-only="true"/>
          <!-- 其他方法使用預設的事務設定,超時5s -->
          <tx:method name="*" isolation="DEFAULT" propagation="REQUIRED" timeout="-1"/>
       </tx:attributes>
    </tx:advice>
    <!-- 配置aop元素 -->
    <aop:config>
        <aop:pointcut expression="execution(* com.service.Imp.*Imp.*(..))" id="myPointcut"/>
        <aop:advisor advice-ref="txAdvice" pointcut-ref="myPointcut"/>
    </aop:config>
   3.註解方式配置@Transactional,優點方便,缺點是每個業務類都要配一遍。

PS:<tx:attributes>中還可以包含rollback-for:發生哪些異常進行回滾;no-rollback:發生哪些異常不進行回滾;timeout:超時時長,預設為-1;read-only:只讀;

相關推薦

spring事務學習總結

spring事務  1.主要有三個介面:PlatformTransactionManager(全域性事務管理器)、TransactionDefinition(事務配置相關,如隔離、只讀、傳播、超時、異常回滾等)、TransactionStatus(有查詢事務狀態的相關方法,

事務學習總結(2)——spring事務

一、spring事務:       spring針對事務的解決方案,在基礎的隔離性基礎上,又增加了事務傳播行為、只讀事務、事務超時的機制。 二、事務傳播:       其實就是兩個事務傳播。     &n

Spring Boot學習總結】13.Spring Boot事務控制

上一篇我們講解了Spring Boot與MyBatis的結合開發,併成功操作了資料庫。眾所周知,保證資料庫一致性的操作,就是事務的控制。 而Spring事務管理可以分為兩種:程式設計式以及宣告式。 其中程式設計式事務就是使用編寫程式碼的方式,進行事務的控制。而宣告式事務一般通

Spring MVC學習總結

整合 編寫 bat follow ref 轉換 3.1 subjects rds Spring MVC學習總結 Spring MVC學習路(一) 下載配置文件 Spring MVC學習路(二) 設置配置文件 Spring MVC學習路(三) 編寫第一個demo Spring

Spring IOC 學習總結

class文件 .net 全局 監聽 mave object pri 想想 forname 1 什麽是IOC、DI   IoC—Inversion of Control,即“控制反轉”,不是什麽技術,而是一種設計思想。在Java開發中,Ioc意味著將你設計好的對象交給容器控

Spring事務管理總結

需求 應用 def 關系數據庫 stat 啟動 全部 test data 事務定義   事務管理對於企業應用來說是至關重要的,主要作用是用來保證數據的一致性,比如轉賬問題。如下偽代碼所示: transaction begin A賬戶扣100 B賬戶加100

Spring-Batch學習總結(1)——重要概念,環境搭建,名詞解釋,第一個項目及異常處理

img truct 設定 uil sna sta col key services Spring-batch框架學習總結(1)一.初識Spring-batch框架:1.核心名詞解釋:Job:是Spring-batch框架的核心概念,它包含了批處理的所有操作Step:每一個J

Spring-batch學習總結(2)—Job,Flow創建及應用,多線程並發,決策器,監聽器,參數

class getname current ces 表達式 .get been ant string 一.Job的創建及其應用1.Job flow的介紹:(1)狀態機:例完成step1,是否繼續完成step2,step3,我們就需要通過Job flow來控制(2)進行演示:

Spring boot學習總結

高級 一個 命令行參數 內置 準備工作 exc 1.8 傳遞 開發 引言之前也沒有深入學習過spring框架,最近SpringBoot流行起來後想補下這方面的知識,於是照著SpringBoot官網上的英文教程開始helloworld入門,踩到幾個小坑,記錄下學習流程。 Sp

Spring-batch學習總結(3)—ItemReader普通文件,數據庫,XML,多文件數據讀取

調用 configure sco value getcount asc ash rst desc Spring-Batch學習總結(3)——如何數據輸入一.ItemReader概述1.ItemReader:提供數據的接口2.在這個接口中只有一個方法read(),它讀取一個數

Spring Boot學習總結

請求 clas res control bject figure test 邏輯 context Spring Boot大大簡化了之前java項目的繁瑣xml配置,本文簡單的總結下spring boot的相關知識。 1,@RestController 配置在controll

Spring Boot學習總結

() 無配置文件 select 就會 配置文件 配置 模式 mysq pre 1,mybatis在spring boot下的2種使用模式 無配置文件註解版 application.properties添加相關配置 mybatis.type-aliases-package=c

Spring Boot學習總結】14.Spring Boot整合Redis-與傳統方式對比

前面我們講解了如何使用Spring Boot來控制事務,下面我們來講解一下如何使用Spring Boot來整合Redis 為了對比傳統工程與Spring Boot整合的不同,以及彰顯Spring Boot整合的優勢,我們會逐一剖析傳統整合方式與Spring Boot整合方式。 一、傳統方式整

Spring MVC 學習總結(十一)——IDEA+Maven+多模組實現SSM框架整合

一、SSM概要 與SSH(Struts/Spring/Hibernate/)一樣,Spring+SpringMVC+MyBatis也有一個簡稱SSM,Spring實現業務物件管理,Spring MVC負責請求的轉發和檢視管理, MyBatis作為資料物件持久化引擎。這樣搭配的優點是:輕量、自由度高、Spri

事務學習總結(1)——事務的基本概念

一:什麼是事務?     對資料庫讀寫一系列操作的合集。     具有"ACID"的特性,即原子性、一致性、隔離性、永續性。     核心點是鎖與併發。 二:主要用在哪些場景?解決了什麼問題?    

Spring框架學習總結

單獨使用 可維護 ava 設置 允許 servlet容器 spec 學習 ogr 1. 什麽是Spring框架?   1.1 概念     SpringFrameWork是輕量級容器,它可以使用Struts和webwork等眾多的web應用程序結合使用,也可以單獨使用。  

Spring Boot 學習總結 (一)---入口類和@SpringBootApplication

入口類和@SpringBootApplication SpringBoot通常有一個名為*Application的入口類,入口類裡有一個main方法,這個main方法是一個標準的java應用的入口方法。在main方法中使用SpringApplication.run(*App

Spring Boot學習總結(14)——Spring Boot常見面試題彙總

1、什麼是 Spring Boot? Spring Boot 是 Spring 開源組織下的子專案,是 Spring 元件一站式解決方案,主要是簡化了使用 Spring 的難度,簡省了繁重的配置,提供了各種啟動器,開發者能快速上手。 2、為什麼要用 Spring Boot

Spring Boot學習總結(10)——SpringBoot打包成Docker映象

<build><!--定義jar檔名,可以自定義--><finalName>${project.name}-${project.version}</finalN

Spring Boot學習總結(1)——Spring Boot入門

摘要:Spring Boots是為了幫助開發人員很容易的創建出獨立執行和產品級別的基於 Spring 框架的應用。 從 Spring Boot 專案名稱中的 Boot 可以看出來,Spring