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

SpringBoot中事務(wù)失效的原因詳解

 更新時(shí)間:2023年10月19日 09:38:35   作者:方圓師兄  
這篇文章主要介紹了SpringBoot中事務(wù)失效的原因詳解,spring中的事務(wù)是依賴AOP的,AOP是通過動(dòng)態(tài)代理實(shí)現(xiàn)的,只有通過代理類訪問的方法才能被攔截,需要的朋友可以參考下

SpringBoot事務(wù)失效的原因

1.數(shù)據(jù)庫(kù)是否支持事務(wù)

  • mysql InnoDB(支持事務(wù)) MyISAM(不支持事務(wù))
  • oracle 默認(rèn)支持事務(wù)

2.是否開始事務(wù)

  • 如果沒有開啟事務(wù)需要手動(dòng)開啟 @EnableTransactionManagement
  • 需要在開啟事務(wù)的方法上增加 @Transactional

3.springboot項(xiàng)目中是否注入到springboot里

  • 是否被注入到springboot的一級(jí)緩存里邊,是否被springboot的添加注解所修飾,例如@Controller @RestController @Service @Component 等
  • 增加注解后,是否被@ComponentScan掃描到( @SpringBootApplication 同包下邊也可以)

4.方法是否為private static final 修飾

通過注解開啟事務(wù)本身就需要做代理才可以獲取,方法加上這些修飾就不能被代理了

5.是否try catch了異常、是否throw 了異常

//try catch異常方法失效
try{
int a = 10/0;
}catch(Exception e){
}
//try catch 并throw了異常,事務(wù)生效
try{
int a = 10/0;
}catch(Exception e){
throw new RunTimeException("");
}

6.@Transactional里捕獲的異常是否可以包含拋出的異常

//捕獲的異常和拋出的異常不是包含關(guān)系,事務(wù)就會(huì)失效
@Transactional(rollbackFor = RunTimeException.class)
public void add(){
	throw new IOException("");
}

7.事務(wù)的傳播機(jī)制,是否是非事務(wù)運(yùn)行

傳播機(jī)制解析
REQUIRED如果當(dāng)前存在事務(wù)就加入事務(wù),如果當(dāng)前不存在事務(wù)就創(chuàng)建事務(wù)
REQUIRES_NEW重新創(chuàng)建一個(gè)事務(wù),如果當(dāng)前存在事務(wù),就把當(dāng)前事務(wù)掛起
SUPPORTS支持當(dāng)前事務(wù),如果沒有事務(wù)就已非事務(wù)方式運(yùn)行
NOT_SUPPORTED已非事務(wù)方式運(yùn)行,如果存在事務(wù)就掛起當(dāng)前事務(wù)
MANDATORY支持當(dāng)前事務(wù),如果沒有事務(wù)就拋出異常
NEVER已非事務(wù)方式運(yùn)行,如果存在事務(wù)就拋出異常
NESTED嵌套事務(wù)運(yùn)行,和REQUIRED類似
@Transactional(propagation = Propagation.NOT_SUPPORTED)
public void add(){
	throw new IOException("");
}

8.同一個(gè)類里邊調(diào)用事務(wù)

是否需要走代理,例如注入自己、或使用AopContext

這樣事務(wù)update就會(huì)失效

@Service
public class Order{
	@Transactional
	public void add(){
		new Thread(()->{
			this.update();
		}).start;
	}
	
	@Transactional
	public void update(){}
}

事務(wù)update生效

@Service
public class Order{
	@Autowired
	Order order;
	
	@Transactional
	public void add(){
	    new Thread(()->{
			order.update();
		}).start;
	}
	
	@Transactional
	public void update(){}
}

到此這篇關(guān)于SpringBoot中事務(wù)失效的原因詳解的文章就介紹到這了,更多相關(guān)SpringBoot事務(wù)失效的原因內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 基于spring+quartz的分布式定時(shí)任務(wù)框架實(shí)現(xiàn)

    基于spring+quartz的分布式定時(shí)任務(wù)框架實(shí)現(xiàn)

    在Spring中的定時(shí)任務(wù)功能,最好的辦法當(dāng)然是使用Quartz來實(shí)現(xiàn)。這篇文章主要介紹了基于spring+quartz的分布式定時(shí)任務(wù)框架實(shí)現(xiàn),有興趣的可以了解一下。
    2017-01-01
  • Java實(shí)現(xiàn)商城訂單超時(shí)取消功能

    Java實(shí)現(xiàn)商城訂單超時(shí)取消功能

    大多數(shù)的B2C商城項(xiàng)目都會(huì)有限時(shí)活動(dòng),當(dāng)用戶下單后都會(huì)有支付超時(shí)時(shí)間,當(dāng)訂單超時(shí)后訂單的狀態(tài)就會(huì)自動(dòng)變成已取消 ,這個(gè)功能的實(shí)現(xiàn)有很多種方法,本文的實(shí)現(xiàn)方法適合大多數(shù)比較小的商城使用。具體實(shí)現(xiàn)方式可以跟隨小編一起看看吧
    2019-12-12
  • Spring整合Mybatis具體代碼實(shí)現(xiàn)流程

    Spring整合Mybatis具體代碼實(shí)現(xiàn)流程

    這篇文章主要介紹了Spring整合Mybatis實(shí)操分享,文章首先通過介紹Mybatis的工作原理展開Spring整合Mybatis的詳細(xì)內(nèi)容,需要的小伙伴可以參考一下
    2022-05-05
  • Java微信公眾平臺(tái)開發(fā)(15) 微信JSSDK的使用

    Java微信公眾平臺(tái)開發(fā)(15) 微信JSSDK的使用

    這篇文章主要為大家詳細(xì)介紹了Java微信公眾平臺(tái)開發(fā)第十五步,微信JSSDK的使用方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-04-04
  • java實(shí)現(xiàn)二叉樹的創(chuàng)建及5種遍歷方法(總結(jié))

    java實(shí)現(xiàn)二叉樹的創(chuàng)建及5種遍歷方法(總結(jié))

    下面小編就為大家?guī)硪黄猨ava實(shí)現(xiàn)二叉樹的創(chuàng)建及5種遍歷方法(總結(jié))。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-04-04
  • Spring Boot MyBatis 連接數(shù)據(jù)庫(kù)配置示例

    Spring Boot MyBatis 連接數(shù)據(jù)庫(kù)配置示例

    本篇文章主要介紹了Spring Boot MyBatis 連接數(shù)據(jù)庫(kù)示例的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。
    2017-02-02
  • java為什么會(huì)出現(xiàn)精度丟失這種現(xiàn)象你知道嗎

    java為什么會(huì)出現(xiàn)精度丟失這種現(xiàn)象你知道嗎

    這篇文章主要介紹了Java精度丟失的問題,幫助大家更好的理解和使用Java,感興趣的朋友可以了解下,希望能夠給你帶來幫助
    2021-08-08
  • java中的定時(shí)器和多線程

    java中的定時(shí)器和多線程

    這篇文章主要介紹了java中的定時(shí)器和多線程用法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • 使用SpringSecurity處理CSRF攻擊的方法步驟

    使用SpringSecurity處理CSRF攻擊的方法步驟

    這篇文章主要介紹了使用SpringSecurity處理CSRF攻擊的方法步驟,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2019-03-03
  • Java的靜態(tài)方法Arrays.asList()使用指南

    Java的靜態(tài)方法Arrays.asList()使用指南

    Arrays.asList() 是一個(gè) Java 的靜態(tài)方法,它可以把一個(gè)數(shù)組或者多個(gè)參數(shù)轉(zhuǎn)換成一個(gè) List 集合,這個(gè)方法可以作為數(shù)組和集合之間的橋梁,方便我們使用集合的一些方法和特性,本文將介紹 Arrays.asList() 的語法、應(yīng)用場(chǎng)景、坑點(diǎn)和總結(jié)
    2023-09-09

最新評(píng)論