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

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

springBoot service層事務控制的操作

瀏覽:6日期: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注解的配置上,需要配置異?;貪L。

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

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

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

標簽: Spring
相關文章:
主站蜘蛛池模板: 365文案网_全网创意文案句子素材站 | 桁架机器人_桁架机械手_上下料机械手_数控车床机械手-苏州清智科技装备制造有限公司 | 医疗仪器模块 健康一体机 多参数监护仪 智慧医疗仪器方案定制 血氧监护 心电监护 -朗锐慧康 | 120kv/2mA直流高压发生器-60kv/2mA-30kva/50kv工频耐压试验装置-旭明电工 | 潜水搅拌机-双曲面搅拌机-潜水推进器|奥伯尔环保 | 氢氧化钙设备_厂家-淄博工贸有限公司 | 北京发电车出租-发电机租赁公司-柴油发电机厂家 - 北京明旺盛安机电设备有限公司 | 厦门ISO认证|厦门ISO9001认证|厦门ISO14001认证|厦门ISO45001认证-艾索咨询专注ISO认证行业 | 广州二手电缆线回收,旧电缆回收,广州铜线回收-广东益福电缆线回收公司 | 北京森语科技有限公司-模型制作专家-展览展示-沙盘模型设计制作-多媒体模型软硬件开发-三维地理信息交互沙盘 | wika威卡压力表-wika压力变送器-德国wika代理-威卡总代-北京博朗宁科技 | 中国品牌排名投票_十大品牌榜单_中国著名品牌【中国品牌榜】 | 深圳宣传片制作-企业宣传视频制作-产品视频拍摄-产品动画制作-短视频拍摄制作公司 | PCB厂|线路板厂|深圳线路板厂|软硬结合板厂|电路板生产厂家|线路板|深圳电路板厂家|铝基板厂家|深联电路-专业生产PCB研发制造 | 锤式粉碎机,医药粉碎机,锥式粉碎机-无锡市迪麦森机械制造有限公司 | 丹佛斯压力传感器,WISE温度传感器,WISE压力开关,丹佛斯温度开关-上海力笙工业设备有限公司 | 郑州墨香品牌设计公司|品牌全案VI设计公司 | 论文查重_免费论文查重_知网学术不端论文查重检测系统入口_论文查重软件 | 聚氨酯催化剂K15,延迟催化剂SA-1,叔胺延迟催化剂,DBU,二甲基哌嗪,催化剂TMR-2,-聚氨酯催化剂生产厂家 | 电动葫芦-河北悍象起重机械有限公司| 中国品牌门窗网_中国十大门窗品牌_著名门窗品牌 | 广州二手电缆线回收,旧电缆回收,广州铜线回收-广东益福电缆线回收公司 | 储能预警-储能消防系统-电池舱自动灭火装置-四川千页科技股份有限公司官网 | RV减速机-蜗轮蜗杆减速机-洗车机减速机-减速机厂家-艾思捷 | 餐饮加盟网_特色餐饮加盟店_餐饮连锁店加盟 | 房在线-免费房产管理系统软件-二手房中介房屋房源管理系统软件 | 拉卡拉POS机官网 - 官方直营POS机办理|在线免费领取 | 气动隔膜阀_气动隔膜阀厂家_卫生级隔膜阀价格_浙江浙控阀门有限公司 | 播音主持培训-中影人教育播音主持学苑「官网」-中国艺考界的贵族学校 | ASA膜,ASA共挤料,篷布色母料-青岛未来化学有限公司 | B2B网站_B2B免费发布信息网站_B2B企业贸易平台 - 企资网 | 电气控制系统集成商-PLC控制柜变频控制柜-非标自动化定制-电气控制柜成套-NIDEC CT变频器-威肯自动化控制 | 超声波焊接机,振动摩擦焊接机,激光塑料焊接机,超声波焊接模具工装-德召尼克(常州)焊接科技有限公司 | 全自动固相萃取仪_高通量真空平行浓缩仪-勤业永为 | 铝合金重力铸造_铝合金翻砂铸造_铝铸件厂家-东莞市铝得旺五金制品有限公司 | 高博医疗集团上海阿特蒙医院| 杜康白酒加盟_杜康酒代理_杜康酒招商加盟官网_杜康酒厂加盟总代理—杜康酒神全国运营中心 | 无负压供水设备,消防稳压供水设备-淄博创辉供水设备有限公司 | 期货软件-专业期货分析软件下载-云智赢 | 钢丝绳探伤仪-钢丝绳检测仪-钢丝绳探伤设备-洛阳泰斯特探伤技术有限公司 | 机械立体车库租赁_立体停车设备出租_智能停车场厂家_春华起重 |