Spring超詳細(xì)講解事務(wù)和事務(wù)傳播機(jī)制
為什么需要事務(wù)
事務(wù)是將一組操作封裝成一個執(zhí)行單元,要么全部成功,要么全部失敗。如果沒有事務(wù),轉(zhuǎn)賬操作就會出現(xiàn)異常,因此需要保證原子性。
Spring 聲明事務(wù)
- 只需要在方法上添加@Transactional注解就可以實現(xiàn),無需手動開啟和提交事務(wù),如果中途發(fā)生異常就會自動回滾事務(wù)。
- @Transactional既可以修飾方法也可以修飾類,修飾方法只能修飾public方法
- 注意:@Transactional在異常被捕獲的情況下,事務(wù)就不會自動回滾
@Transactional(isolation = Isolation.READ_COMMITTED) // 開啟事務(wù) @RequestMapping("/insert") public int insert(){ UserInfo userInfo = new UserInfo(); userInfo.setName("AOP"); userInfo.setPassword("123456"); return userService.add(userInfo); } @Transactional(isolation = Isolation.READ_COMMITTED) // 開啟事務(wù) @RequestMapping("/insert2") public int insert2(){ UserInfo userInfo = new UserInfo(); userInfo.setName("AOP"); userInfo.setPassword("123456"); int result = userService.add(userInfo); System.out.println("MySQL影響的行數(shù):"+result); int num = 10/0; return result; }
Transactional參數(shù)說明
propagation
事務(wù)的傳播行為,默認(rèn)為Propagation.REQUIRED
isolation
Spring有5種隔離級別,MySQL有四種隔離級別,Spring多了一個DEFAULT,以連接的數(shù)據(jù)庫的事務(wù)隔離級別為主
timeout
表示事務(wù)的超時時間,默認(rèn)值為-1,如果事務(wù)執(zhí)行時間超過超時時間,就會自動回滾
事務(wù)回滾失效解決方案
直接拋出異常
@Transactional(propagation = Propagation.REQUIRED) // 開啟事務(wù) @RequestMapping("/insert2") public int insert2(){ UserInfo userInfo = new UserInfo(); userInfo.setName("AOP"); userInfo.setPassword("123456"); int result = userService.add(userInfo); System.out.println("MySQL影響的行數(shù):"+result); try { int num = 10/0; }catch (Exception e){ result = 0; e.printStackTrace(); throw e;//解決事務(wù)失效的問題 // TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); } return result; }
在catch中使用代碼手動進(jìn)行事務(wù)的回滾操作
@Transactional(propagation = Propagation.REQUIRED) // 開啟事務(wù) @RequestMapping("/insert2") public int insert2(){ UserInfo userInfo = new UserInfo(); userInfo.setName("AOP"); userInfo.setPassword("123456"); int result = userService.add(userInfo); System.out.println("MySQL影響的行數(shù):"+result); try { int num = 10/0; }catch (Exception e){ result = 0; e.printStackTrace(); //throw e;//解決事務(wù)失效的問題 TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); } return result; }
@Transactional工作原理
@Transactional是基于AOP實現(xiàn)的,AOP又是使用動態(tài)代理實現(xiàn)的。如果目標(biāo)對象實現(xiàn)了接口,默認(rèn)情況下會采用JDK的動態(tài)代理,如果目標(biāo)對象沒有實現(xiàn)了接口,會使用CGLIB動態(tài)代理。
@Transactional在開始執(zhí)行業(yè)務(wù)之前,通過代理先開啟事務(wù),在執(zhí)行成功之后再提交事務(wù)。如果中途遇到了異常,則回滾事務(wù)。
Spring 事務(wù)的傳播機(jī)制
定義:Spring中多個事務(wù)相互調(diào)用時,他們之間的行為方式是如何執(zhí)行的
為什么需要事務(wù)傳播機(jī)制?
事務(wù)的隔離級別是保證多個并發(fā)事務(wù)執(zhí)行的可控性(穩(wěn)定性),而事務(wù)傳播機(jī)制是保證一個事務(wù)在多個調(diào)用方法間的可控性
傳播機(jī)制的類型
嵌套事務(wù)和加入事務(wù)的區(qū)別
- 整個事務(wù)如果全部執(zhí)行成功,二者的結(jié)果是一樣的
- 如果事務(wù)執(zhí)行到一半失敗了,那么加入事務(wù)整個事務(wù)會全部回滾;而嵌套事務(wù)會局部回滾,不會影響上一個方法中執(zhí)行的結(jié)果
到此這篇關(guān)于Spring超詳細(xì)講解事務(wù)和事務(wù)傳播機(jī)制的文章就介紹到這了,更多相關(guān)Spring事務(wù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Spring Boot 會員管理系統(tǒng)之處理文件上傳功能
Spring Boot會員管理系統(tǒng)的中,需要涉及到Spring框架,SpringMVC框架,Hibernate框架,thymeleaf模板引擎。這篇文章主要介紹了Spring Boot會員管理系統(tǒng)之處理文件上傳功能,需要的朋友可以參考下2018-03-03Java中的FilterOutputStream 簡介_動力節(jié)點(diǎn)Java學(xué)院整理
FilterOutputStream 的作用是用來“封裝其它的輸出流,并為它們提供額外的功能”。它主要包括BufferedOutputStream, DataOutputStream和PrintStream。接下來通過本文給大家簡單介紹下FilterOutputStream知識,需要的朋友參考下吧2017-05-05springboot項目中jacoco服務(wù)端部署使用
這篇文章主要為大家介紹了springboot項目中jacoco服務(wù)端部署使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-07-07Spring事務(wù)執(zhí)行流程及如何創(chuàng)建事務(wù)
這篇文章主要介紹了Spring事務(wù)執(zhí)行流程及如何創(chuàng)建事務(wù),幫助大家更好的理解和學(xué)習(xí)使用spring框架,感興趣的朋友可以了解下2021-03-03詳解Spring中@Valid和@Validated注解用法
本文將以新增一個員工為功能切入點(diǎn),以常規(guī)寫法為背景,慢慢烘托出?@Valid?和?@Validated?注解用法詳解,文中的示例代碼講解詳細(xì),感興趣的可以了解一下2022-07-07記一次集成swagger2(Knife4j)在線文檔提示:Knude4j文檔請求異常的解決辦法
Knife4j是一個集Swagger2 和 OpenAPI3為一體的增強(qiáng)解決方案,下面這篇文章主要給大家介紹了關(guān)于一次集成swagger2(Knife4j)在線文檔提示:Knude4j文檔請求異常的解決辦法,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-02-02springmvc中RequestMappingHandlerAdapter與HttpMessageConverter的
今天小編就為大家分享一篇關(guān)于springmvc中RequestMappingHandlerAdapter與HttpMessageConverter的裝配講解,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2019-01-01