網站首頁 編程語言 正文
四種隔離級別
- 讀未提交
- 讀已提交
- 可重復讀
- 序列化
如果沒有隔離,多線程出現的問題
- 臟讀
- 第一類丟失更新
- 不可重復讀
- 第二類丟失更新
- 幻讀
解釋
臟讀:一個連接讀到另一個連接修改但沒有提交的數據
第一類丟失更新:a連接開啟事務,b連接隨后開啟事務并更新完,但a發生異常回滾,回到a最初的狀態,把b的更新給淹沒
不可重復讀:a讀數據假設為1,b修改數據改為2并提交,a再讀數據發現數據變為2
第二類丟失更新:a連接開啟事務,b連接隨后開啟事務并更新完,a提交事務,把b的更新給淹沒
幻讀:a查詢表中共多少條數據,之后b插入一條數據,a再讀就會發現前后兩次不一致。
選擇隔離級別避免發生問題
在spring中添加事務
聲明式事務
- 注解
- xml配置文件
編程式事務
TransactionTemplate 這種適合更細粒度的事務
代碼實戰
isolation 隔離級別
propagation 事務傳播
常用的三種:
- required
- required-new
- nested
解釋
required:a調用b,如果a有事務,就按a的事務來,沒有就創建事務,b失敗回滾
required-new:a調用b,創建一個新事務,并暫停外部事務,就是說不管a是夠成功,b都完成了
nested:如果存在外部事務a,則嵌套到外部事務中,a并有獨立的提交和回滾,b如果失敗則回滾,但a不一定,也就是說a不管b成功與否,自己先完成再說,否則就和required-new一樣
如果事務中發生情況就不會插入成功
聲明式事務
@Transactional(isolation = Isolation.REPEATABLE_READ,propagation = Propagation.REQUIRED)
public void insert(){
User user = new User();
userService.insertUser(user);
int a=1/0;
}
編程式事務
public void insert(){
TransactionTemplate template = new TransactionTemplate();
template.setIsolationLevel(TransactionDefinition.ISOLATION_REPEATABLE_READ);
template.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED);
template.execute(new TransactionCallback<Object>() {
@Override
public Object doInTransaction(TransactionStatus status) {
User user = new User();
userService.insertUser(user);
int a=1/0;
return null;
}
});
}
原文鏈接:https://blog.csdn.net/miss_na/article/details/123084821
相關推薦
- 2022-03-23 C++通過文件指針獲取文件大小的方法實現_C 語言
- 2022-09-25 什么是模板引擎(web)?常見的模板引擎有哪些?thymeleaf的常用指令介紹
- 2022-07-10 使用Docker安裝RabbitMQ
- 2022-12-24 Python中if語句的使用方法及實例代碼_python
- 2022-10-07 C語言順序查找算法介紹及示例_C 語言
- 2022-01-06 npm ERR! code ERESOLVE npm ERR! ERESOLVE unable to
- 2022-09-10 python中的隨機數種子seed()用法說明_python
- 2022-12-05 GPU狀態監測?nvidia-smi?命令的用法詳解_python
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支