欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

Spring事務(wù)失效的原因是什么

本篇內(nèi)容主要講解“Spring事務(wù)失效的原因是什么”,感興趣的朋友不妨來(lái)看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來(lái)帶大家學(xué)習(xí)“Spring事務(wù)失效的原因是什么”吧!

創(chuàng)新互聯(lián)公司服務(wù)緊隨時(shí)代發(fā)展步伐,進(jìn)行技術(shù)革新和技術(shù)進(jìn)步,經(jīng)過(guò)10余年的發(fā)展和積累,已經(jīng)匯集了一批資深網(wǎng)站策劃師、設(shè)計(jì)師、專業(yè)的網(wǎng)站實(shí)施團(tuán)隊(duì)以及高素質(zhì)售后服務(wù)人員,并且完全形成了一套成熟的業(yè)務(wù)流程,能夠完全依照客戶要求對(duì)網(wǎng)站進(jìn)行成都網(wǎng)站設(shè)計(jì)、網(wǎng)站制作、建設(shè)、維護(hù)、更新和改版,實(shí)現(xiàn)客戶網(wǎng)站對(duì)外宣傳展示的首要目的,并為客戶企業(yè)品牌互聯(lián)網(wǎng)化提供全面的解決方案。

1、數(shù)據(jù)庫(kù)引擎不支持事務(wù)

這里以 MySQL 為例,其 MyISAM 引擎是不支持事務(wù)操作的,InnoDB 才是支持事務(wù)的引擎,一般要支持事務(wù)都會(huì)使用 InnoDB。

根據(jù) MySQL 的官方文檔:

  • https://dev.mysql.com/doc/refman/5.5/en/storage-engine-setting.html

從 MySQL 5.5.5  開始的默認(rèn)存儲(chǔ)引擎是:InnoDB,之前默認(rèn)的都是:MyISAM,所以這點(diǎn)要值得注意,底層引擎不支持事務(wù)再怎么搞都是白搭。

2、沒(méi)有被 Spring 管理

如下面例子所示:

// @Service public class OrderServiceImpl implements OrderService {      @Transactional     public void updateOrder(Order order) {         // update order     }      }

如果此時(shí)把 @Service 注解注釋掉,這個(gè)類就不會(huì)被加載成一個(gè) Bean,那這個(gè)類就不會(huì)被 Spring 管理了,事務(wù)自然就失效了。

3、方法不是 public 的

以下來(lái)自 Spring 官方文檔:

  • When using proxies, you should apply the @Transactional annotation only to  methods with public visibility. If you do annotate protected, private or  package-visible methods with the @Transactional annotation, no error is raised,  but the annotated method does not exhibit the configured transactional settings.  Consider the use of AspectJ (see below) if you need to annotate non-public  methods.

大概意思就是 @Transactional 只能用于 public 的方法上,否則事務(wù)不會(huì)失效,如果要用在非 public 方法上,可以開啟  AspectJ 代理模式。

4、自身調(diào)用問(wèn)題

來(lái)看兩個(gè)示例:

@Service public class OrderServiceImpl implements OrderService {      public void update(Order order) {         updateOrder(order);     }          @Transactional     public void updateOrder(Order order) {         // update order     }      }

update方法上面沒(méi)有加 @Transactional 注解,調(diào)用有 @Transactional 注解的 updateOrder  方法,updateOrder 方法上的事務(wù)管用嗎?

再來(lái)看下面這個(gè)例子:

@Service public class OrderServiceImpl implements OrderService {      @Transactional     public void update(Order order) {         updateOrder(order);     }          @Transactional(propagation = Propagation.REQUIRES_NEW)     public void updateOrder(Order order) {         // update order     }      }

這次在 update 方法上加了 @Transactional,updateOrder 加了 REQUIRES_NEW  新開啟一個(gè)事務(wù),那么新開的事務(wù)管用么?

這兩個(gè)例子的答案是:不管用!

因?yàn)樗鼈儼l(fā)生了自身調(diào)用,就調(diào)該類自己的方法,而沒(méi)有經(jīng)過(guò) Spring 的代理類,默認(rèn)只有在外部調(diào)用事務(wù)才會(huì)生效,這也是老生常談的經(jīng)典問(wèn)題了。

這個(gè)的解決方案之一就是在的類中注入自己,用注入的對(duì)象再調(diào)用另外一個(gè)方法,這個(gè)不太優(yōu)雅,另外一個(gè)可行的方案可以參考《Spring  如何在一個(gè)事務(wù)中開啟另一個(gè)事務(wù)?》這篇文章。

5、數(shù)據(jù)源沒(méi)有配置事務(wù)管理器

@Bean public PlatformTransactionManager transactionManager(DataSource dataSource) {     return new DataSourceTransactionManager(dataSource); }

如上面所示,當(dāng)前數(shù)據(jù)源若沒(méi)有配置事務(wù)管理器,那也是白搭!

6、不支持事務(wù)

來(lái)看下面這個(gè)例子:

@Service public class OrderServiceImpl implements OrderService {      @Transactional     public void update(Order order) {         updateOrder(order);     }          @Transactional(propagation = Propagation.NOT_SUPPORTED)     public void updateOrder(Order order) {         // update order     }      }

Propagation.NOT_SUPPORTED: 表示不以事務(wù)運(yùn)行,當(dāng)前若存在事務(wù)則掛起。

都主動(dòng)不支持以事務(wù)方式運(yùn)行了,那事務(wù)生效也是白搭!

7、異常被吃了

這個(gè)也是出現(xiàn)比較多的場(chǎng)景:

// @Service public class OrderServiceImpl implements OrderService {      @Transactional     public void updateOrder(Order order) {         try {             // update order         } catch {                      }     }      }

把異常吃了,然后又不拋出來(lái),事務(wù)怎么回滾吧!

8、異常類型錯(cuò)誤

上面的例子再拋出一個(gè)異常:

// @Service public class OrderServiceImpl implements OrderService {      @Transactional     public void updateOrder(Order order) {         try {             // update order         } catch {             throw new Exception("更新錯(cuò)誤");         }     }      }

這樣事務(wù)也是不生效的,因?yàn)槟J(rèn)回滾的是:RuntimeException,如果你想觸發(fā)其他異常的回滾,需要在注解上配置一下,如:

@Transactional(rollbackFor = Exception.class)

這個(gè)配置僅限于 Throwable 異常類及其子類。

到此,相信大家對(duì)“Spring事務(wù)失效的原因是什么”有了更深的了解,不妨來(lái)實(shí)際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

本文名稱:Spring事務(wù)失效的原因是什么
文章URL:http://aaarwkj.com/article4/igcgoe.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供虛擬主機(jī)、手機(jī)網(wǎng)站建設(shè)網(wǎng)站內(nèi)鏈、微信公眾號(hào)、網(wǎng)站導(dǎo)航網(wǎng)站排名

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站網(wǎng)頁(yè)設(shè)計(jì)
久久国产精品一区二区三区| 日韩黄色精品中文视频| 尤物视频网站在线观看| 亚洲情欲一级片日韩欧美| 欧美一区二区日本国产激情| 亚洲午夜精品毛片成人| 夫妻性生活一级片视频| 久久久人妻精品少妇av| 国产国产精品国产自在午夜| 成人午夜激情四射av| 哪里可以看黄色片日韩| 午夜夫妻生活视频在线观看| 国产中文字幕婷婷丁香| 精品欧美一区二区三区在线| 四虎在线观看最新入口| 精品国产a级黄毛网站| 中国的性生活黄片免费观看| 精品人妻一区二区三区四| 能在线播放的国产三级| 国产成人av在线观看| 最新国产情侣夫妻激情| 国产女人和拘做受视频| 欧美国产日韩二区一区在线| 哪里可以看日韩免费毛片| 九九免费在线视频观看| 日本一区二区欧美亚洲国产| 日韩 欧美 国产 亚洲 综合| 夜色一区二区av人片| 国产一级二级三级久久| 国产欧美日韩亚洲精品区| 婷婷五激情五月激情片| 日本高清视频免费一区| 精品国产一区二区三区卡| 日韩欧美亚洲福利在线| 国产高清剧情在线观看| 激情一区二区三区视频| 老司机午夜视频在线观看| 欧美日韩久久久久久精品| 国产三级在线观看91| 粉嫩美女精品一区二区| 日韩av高清在线播放|