电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

springBoot service層事務控制的操作

瀏覽:4日期:2023-03-24 15:00:09

springBoot使用事物比較簡單,在Application啟動類s上添加@EnableTransactionManagement注解,然后在service層的方法上添加@Transactional注解

@Transactional屬性 屬性 類型 描述 value String 可選的限定描述符,指定使用的事務管理器 propagation enum: Propagation 可選的事務傳播行為設置 isolation enum: Isolation 可選的事務隔離級別設置 readOnly boolean 讀寫或只讀事務,默認讀寫 timeout int (in seconds granularity) 事務超時時間設置 rollbackFor Class對象數組,必須繼承自Throwable 導致事務回滾的異常類數組 rollbackForClassName 類名數組,必須繼承自Throwable 導致事務回滾的異常類名字數組 noRollbackFor Class對象數組,必須繼承自Throwable 不會導致事務回滾的異常類數組 noRollbackForClassName 類名數組,必須繼承自Throwable 不會導致事務回滾的異常類名字數組用法:

@Transactional 可以作用于接口、接口方法、類以及類方法上。當作用于類上時,該類的所有 public 方法將都具有該類型的事務屬性,同時,我們也可以在方法級別使用該標注來覆蓋類級別的定義。

雖然 @Transactional 注解可以作用于接口、接口方法、類以及類方法上,但是 Spring 建議不要在接口或者接口方法上使用該注解,因為這只有在使用基于接口的代理時它才會生效。

另外, @Transactional 注解應該只被應用到 public 方法上,這是由 Spring AOP 的本質決定的。

如果你在 protected、private 或者默認可見性的方法上使用 @Transactional 注解,這將被忽略,也不會拋出任何異常。

默認情況下,只有來自外部的方法調用才會被AOP代理捕獲,也就是,類內部方法調用本類內部的其他方法并不會引起事務行為,即使被調用方法使用@Transactional注解進行修飾。

注解在方法上:

@Autowired private MyBatisDao dao; @Transactional @Override public void insert(Test test) { dao.insert(test); throw new RuntimeException('test');//拋出unchecked異常,觸發事物,回滾 }

@Transactional(noRollbackFor=RuntimeException.class) @Override public void insert(Test test) { dao.insert(test); //拋出unchecked異常,觸發事物,noRollbackFor=RuntimeException.class,不回滾 throw new RuntimeException('test'); }

@Transactional(propagation=Propagation.NOT_SUPPORTED) @Override public void insert(Test test) { //事物傳播行為是PROPAGATION_NOT_SUPPORTED,以非事務方式運行,不會存入數據庫 dao.insert(test); }

注解在類上:當作用于類上時,該類的所有 public 方法將都具有該類型的事務屬性

@Transactional public class MyBatisServiceImpl implements MyBatisService { @Autowired private MyBatisDao dao; @Override public void insert(Test test) { dao.insert(test); //拋出unchecked異常,觸發事物,回滾 throw new RuntimeException('test'); }

注意:有時候在開發時往往出現了添加注解后卻無法回滾

原因:默認spring事務只在發生未被捕獲的 RuntimeException 時才回滾。

spring aop 異常捕獲原理:被攔截的方法需顯式拋出異常,并不能經任何處理,這樣aop代理才能捕獲到方法的異常,才能進行回滾,默認情況下aop只捕獲 RuntimeException 的異常,但可以通過配置來捕獲特定的異常并回滾

換句話說在service的方法中不使用try catch 或者在catch中最后加上throw new runtimeexcetpion(),這樣程序異常時才能被aop捕獲進而回滾。

解決方案:

1.在service層方法拋出RuntimeException異常(如在Catch中需要拋出自定義的異常則只需自定義異常繼承RuntimeException即可),并繼續捕獲和處理這個異常。

2.在service層方法的catch語句中增加:

TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();

語句,手動回滾,這樣上層就無需去處理異常。

補充:springboot多個service互相調用的事務處理

今天,想在一個service的方法A中,調用另一個service的方法B,方法A和方法B均存在數據庫插入操作,并且@Transaction注解也都加了,但是當B方法中拋出異常時,A中的插入語句還是能夠執行成功。

注解配置如下:

@Transactional(isolation= Isolation.DEFAULT,propagation= Propagation.REQUIRED)

百思不得其解,再查找了相關資料后,問題還是出在@Transaction注解的配置上,需要配置異常回滾。

@Transactional(isolation= Isolation.DEFAULT,propagation= Propagation.REQUIRED,rollbackFor = Exception.class)

這樣,當B方法中拋出異常時,A中的操作也會進行回滾,事務就會起到控制作用。

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持好吧啦網。如有錯誤或未考慮完全的地方,望不吝賜教。

標簽: Spring
相關文章:
主站蜘蛛池模板: 乳化沥青设备_改性沥青设备_沥青加温罐_德州市昊通路桥工程有限公司 | 淋巴细胞分离液_口腔医疗器材-精欣华医疗器械(无锡)有限公司 | 全自动五线打端沾锡机,全自动裁线剥皮双头沾锡机,全自动尼龙扎带机-东莞市海文能机械设备有限公司 | 青岛美佳乐清洁工程有限公司|青岛油烟管道清洗|酒店|企事业单位|学校工厂厨房|青岛油烟管道清洗 插针变压器-家用电器变压器-工业空调变压器-CD型电抗器-余姚市中驰电器有限公司 | 沈阳缠绕膜价格_沈阳拉伸膜厂家_沈阳缠绕膜厂家直销 | 山东臭氧发生器,臭氧发生器厂家-山东瑞华环保设备 | 无菌实验室规划装修设计-一体化实验室承包-北京洁净净化工程建设施工-北京航天科恩实验室装备工程技术有限公司 | 珠海网站建设_响应网站建设_珠海建站公司_珠海网站设计与制作_珠海网讯互联 | 网络推广公司_网络营销方案策划_企业网络推广外包平台-上海澜推网络 | 千斤顶,液压千斤顶-力良企业,专业的液压千斤顶制造商,shliliang.com | 砂石生产线_石料生产线设备_制砂生产线设备价格_生产厂家-河南中誉鼎力智能装备有限公司 | 通风天窗,通风气楼,屋顶通风天窗,屋顶通风天窗公司 | 广州市哲铭油墨涂料有限公司,水性漆生产研发基地 | vr安全体验馆|交通安全|工地安全|禁毒|消防|安全教育体验馆|安全体验教室-贝森德(深圳)科技 | 琉璃瓦-琉璃瓦厂家-安徽盛阳新型建材科技有限公司 | 橡胶膜片,夹布膜片,橡胶隔膜密封,泵阀设备密封膜片-衡水汉丰橡塑科技公司网站 | 振动时效_振动时效仪_超声波冲击设备-济南驰奥机电设备有限公司 北京宣传片拍摄_产品宣传片拍摄_宣传片制作公司-现像传媒 | 干洗加盟网-洗衣店品牌排行-干洗设备价格-干洗连锁加盟指南 | 【铜排折弯机,钢丝折弯成型机,汽车发泡钢丝折弯机,线材折弯机厂家,线材成型机,铁线折弯机】贝朗折弯机厂家_东莞市贝朗自动化设备有限公司 | 上海瑶恒实业有限公司|消防泵泵|离心泵|官网 | 武汉高低温试验机-现货恒温恒湿试验箱-高低温湿热交变箱价格-湖北高天试验设备 | 深圳南财多媒体有限公司介绍 | 活性炭-蜂窝-椰壳-柱状-粉状活性炭-河南唐达净水材料有限公司 | KBX-220倾斜开关|KBW-220P/L跑偏开关|拉绳开关|DHJY-I隔爆打滑开关|溜槽堵塞开关|欠速开关|声光报警器-山东卓信有限公司 | 祝融环境-地源热泵多恒系统高新技术企业,舒适生活环境缔造者! | 生物风-销售载体,基因,质粒,ATCC细胞,ATCC菌株等,欢迎购买-百风生物 | 超细粉碎机|超微气流磨|气流分级机|粉体改性设备|超微粉碎设备-山东埃尔派粉碎机厂家 | 激光内雕_led玻璃_发光玻璃_内雕玻璃_导光玻璃-石家庄明晨三维科技有限公司 激光内雕-内雕玻璃-发光玻璃 | 高清视频编码器,4K音视频编解码器,直播编码器,流媒体服务器,深圳海威视讯技术有限公司 | 皮带式输送机械|链板式输送机|不锈钢输送机|网带输送机械设备——青岛鸿儒机械有限公司 | NBA直播_NBA直播免费观看直播在线_NBA直播免费高清无插件在线观看-24直播网 | 制冷采购电子商务平台——制冷大市场| 运动木地板厂家_体育木地板安装_篮球木地板选购_实木运动地板价格 | 耐酸碱胶管_耐腐蚀软管总成_化学品输送软管_漯河利通液压科技耐油耐磨喷砂软管|耐腐蚀化学软管 | 防爆暖风机_防爆电暖器_防爆电暖风机_防爆电热油汀_南阳市中通智能科技集团有限公司 | 欧景装饰设计工程有限公司-无锡欧景装饰官网| 玉米加工设备,玉米深加工机械,玉米糁加工设备.玉米脱皮制糁机 华豫万通粮机 | 河南包装袋厂家_河南真空袋批发价格_河南服装袋定制-恒源达包装制品 | 出国劳务公司_正规派遣公司[严海]| 新材料分散-高速均质搅拌机-超声波分散混合-上海化烁智能设备有限公司 | 层流手术室净化装修-检验科ICU改造施工-华锐净化工程-特殊科室建设厂家 |