日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

SpringBoot中事務

作者:Bunny0212 更新時間: 2024-03-14 編程語言

SpringBoot中事務

需要的依賴

<dependencies>
    <!--spring jdbc  Spring 持久化層支持jar包-->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-jdbc</artifactId>
        <version>6.0.2</version>
    </dependency>
    <!-- MySQL驅動 -->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>8.0.30</version>
    </dependency>
    <!-- 數據源 -->
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>druid</artifactId>
        <version>1.2.15</version>
    </dependency>
</dependencies>

事務簡介

什么是事務

數據庫事務( transaction)是訪問并可能操作各種數據項的一個數據庫操作序列,這些操作要么全部執行,要么全部不執行,是一個不可分割的工作單位。事務由事務開始與事務結束之間執行的全部數據庫操作組成。

事務的特性

A:原子性(Atomicity)

一個事務(transaction)中的所有操作,要么全部完成,要么全部不完成,不會結束在中間某個環節。事務在執行過程中發生錯誤,會被回滾(Rollback)到事務開始前的狀態,就像這個事務從來沒有執行過一樣。

C:一致性(Consistency)

事務的一致性指的是在一個事務執行之前和執行之后數據庫都必須處于一致性狀態。

如果事務成功地完成,那么系統中所有變化將正確地應用,系統處于有效狀態。

如果在事務中出現錯誤,那么系統中的所有變化將自動地回滾,系統返回到原始狀態。

I:隔離性(Isolation)

指的是在并發環境中,當不同的事務同時操縱相同的數據時,每個事務都有各自的完整數據空間。由并發事務所做的修改必須與任何其他并發事務所做的修改隔離。事務查看數據更新時,數據所處的狀態要么是另一事務修改它之前的狀態,要么是另一事務修改它之后的狀態,事務不會查看到中間狀態的數據。

D:持久性(Durability)

指的是只要事務成功結束,它對數據庫所做的更新就必須保存下來。即使發生系統崩潰,重新啟動數據庫系統后,數據庫還能恢復到事務成功結束時的狀態。

在SpringBoot中使用事務

  • 使用注解@Transactional
    • @Transactional標識在方法上,則只會影響該方法
    • @Transactional標識的類上,則會影響類中所有的方法
事務屬性:只讀
@Transactional(readOnly = true)
public void test() {
    // Java代碼
}

對增刪改操作設置只讀會拋出下面異常:

Caused by: java.sql.SQLException: Connection is read-only. Queries leading to data modification are not allowed
事務屬性:超時

事務在執行過程中,有可能因為遇到某些問題,導致程序卡住,從而長時間占用數據庫資源。而長時間占用資源,大概率是因為程序運行出現了問題(可能是Java程序或MySQL數據庫或網絡連接等等)。此時這個很可能出問題的程序應該被回滾,撤銷它已做的操作,事務結束,把資源讓出來,讓其他正常程序可以執行。

概括來說就是一句話:超時回滾,釋放資源。

//超時時間單位秒
@Transactional(timeout = 3)
public void test() {
    // Java代碼
}

執行過程中拋出異常:

org.springframework.transaction.**TransactionTimedOutException**: Transaction timed out: deadline was Fri Jun 04 16:25:39 CST 2022
事務屬性:回滾策略

可以通過@Transactional中相關屬性設置回滾策略

  • rollbackFor屬性:需要設置一個Class類型的對象

  • rollbackForClassName屬性:需要設置一個字符串類型的全類名

  • noRollbackFor屬性:需要設置一個Class類型的對象

  • rollbackFor屬性:需要設置一個字符串類型的全類名

@Transactional(noRollbackFor = ArithmeticException.class)
public void test() {
    // Java代碼
}

如果只是簡單的事務,可以直接在類上加上@Transactional或者在方法上加上@Transactional注解即可實現事務回滾。

原文鏈接:https://blog.csdn.net/weixin_46533577/article/details/136601588

  • 上一篇:沒有了
  • 下一篇:沒有了
欄目分類
最近更新