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