@Transactional遇到try catch失效的問(wèn)題
@Transactional遇到try catch失效
Springboot中@Transactional遇到了try catch失效了,需要手動(dòng)回滾
try { user.setExpire(Integer.parseInt(expire)); userService.updateById(user); Host host = hostService.getById(user.getHostId());//查詢數(shù)據(jù)庫(kù)的host信息 updateResponse = proxmoxConfig.updateEffectiveTime(user.getUserName(), expire, host.getHostUrlRequest()); } catch (Exception e) { e.printStackTrace(); TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); }
@Transactional與try..catch同時(shí)使用的經(jīng)驗(yàn)
@transactional 是我們?cè)趈ava 開(kāi)發(fā)中經(jīng)常用到的注解,幫助我們非常方便快捷的完成事務(wù)管理,尤其在批量處理數(shù)據(jù)的時(shí)候,更是重要,最近業(yè)務(wù)中遇到了這種情況,
批量向數(shù)據(jù)庫(kù)導(dǎo)入數(shù)據(jù),這就會(huì)出現(xiàn)excel表中有的數(shù)據(jù)類型符合導(dǎo)入要求,有的不符合,當(dāng)我們導(dǎo)入的時(shí)候要么就全部成功的導(dǎo)入,要么就失敗都不導(dǎo)入,如果不用事務(wù)的話就會(huì)出現(xiàn)數(shù)據(jù)正確的會(huì)導(dǎo)入到數(shù)據(jù)庫(kù),不正確的就沒(méi)導(dǎo)入,造成數(shù)據(jù)的不一致性,
可我的業(yè)務(wù)不僅僅是用@transactional 注解完成事務(wù),而且當(dāng)出現(xiàn)數(shù)據(jù)不符拋異常的時(shí)候還要返回錯(cuò)誤的提示,所以我還得結(jié)核try...catch 塊,問(wèn)題來(lái)了,用try...catch就是捕獲異常,然后處理掉,而 @transactional 是要在系統(tǒng)拋異常的時(shí)候才能起到事務(wù)回滾的作用,
后來(lái)我查了一些資料,如下操作:
重點(diǎn)就是TransactionAspectSupport.currentTransactionStatus().setRollbackOnly 這個(gè)方法,它會(huì)起到異?;貪L的作用,這樣我就可以在它執(zhí)行完之后,設(shè)置需要返回的自定義的信息
最近又遇到了@transactional 注解不起作用的問(wèn)題了,這一次的情況是原來(lái)我的mysql 數(shù)據(jù)庫(kù)默認(rèn)用的是MyISAM 引擎,而這個(gè)存儲(chǔ)引擎不支持事務(wù),所以需要對(duì)數(shù)據(jù)庫(kù)的進(jìn)行一下操作:在控制臺(tái)輸入 alter table xxx(表名) engine=InnoDB 然后你可以在輸入show create table xxx(表名) 來(lái)查看是否修改成功
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
教你用IDEA配置JUnit并進(jìn)行單元測(cè)試
今天教各位小伙伴怎么用IDEA配置JUnit并進(jìn)行單元測(cè)試,文中有非常詳細(xì)的圖文介紹及代碼示例,對(duì)正在學(xué)習(xí)IDEA的小伙伴有很好的幫助,需要的朋友可以參考下2021-05-05Maven插件構(gòu)建Docker鏡像的實(shí)現(xiàn)步驟
這篇文章主要介紹了Maven插件構(gòu)建Docker鏡像的實(shí)現(xiàn)步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-10-10windows定時(shí)器配置執(zhí)行java jar文件的方法詳解
這篇文章主要給大家介紹了關(guān)于windows定時(shí)器配置執(zhí)行java jar文件的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-11-11SpringBoot配置連接兩個(gè)或多個(gè)數(shù)據(jù)庫(kù)的實(shí)現(xiàn)
本文主要介紹了SpringBoot配置連接兩個(gè)或多個(gè)數(shù)據(jù)庫(kù)的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-05-05springboot接口多實(shí)現(xiàn)類選擇性注入解決方案
這篇文章主要為大家介紹了springboot接口多實(shí)現(xiàn)類選擇性注入解決方案的四種方式,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步2022-03-03mybatis框架之mybatis中dao層開(kāi)發(fā)的兩種方法
這篇文章主要介紹了mybatis框架之mybatis中dao層開(kāi)發(fā)的兩種方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-07-07