学习杂记【1】关于spring JTA异常处理的rollback行为

spring的事务处理由aop处理,关于spring aop的学习和理解后续会写另一篇的文章,这里暂时不提。

我们通常在方法或者类上加上@Transcational将一个方法纳入spring事务管理,spring会在方法开始前开启一个事务,在方法执行完毕之后对内部的数据库操作进行commit或者rollback(成功就commit,失败就rollback咯)。

成功当然皆大欢喜,而失败则是我们需要了解的地方。先说结论:
以下几句话意思大致接近:

  • spring默认会对方法内部抛出的非受检异常(unchecked exception)做rollback处理。
  • 方法内部抛出的受检异常(checked exception)或者吞掉了非受检异常,spring事务会失效。

非受检一般包括Error和RunTimeException,抛开Error,那么就是说spring事务回滚是看是不是抛出RunTimeException。
那么关于异常处理用到的try catch代码块就需要稍加注意:
1⃣️不要私吞exception(catch之后只打打log这种操作)
2⃣️如果遇到受检异常比如说IOException时,如果需要让事务依然生效,请使用

@Transactional(rollbackFor=Exception.class)

最后:
spring文档对此的解释是:

While the EJB default behavior is for the EJB container to automatically roll back the transaction on a system exception (usually a runtime exception), EJB CMT does not roll back the transaction automatically on an application exception (that is, a checked exception other than java.rmi.RemoteException). While the Spring default behavior for declarative transaction management follows EJB convention (roll back is automatic only on unchecked exceptions), it is often useful to customize this.

实话说我没看到更深的东西,感觉就是spring希望我们使用unchecked exceptions来维护事务,希望理解更深的同学可以解释解释。

1 声望
1 粉丝
0 条评论
推荐阅读
学习杂记【2】关于spring IOC和DI的理解
抛开语言和框架,先从一个通俗的例子来了解。租客租房,小王是需要三室一厅的一个房源,也就是说小王依赖这个房源。传统的做法是小王自己跑街串巷去寻找房源,这里就是我们理解的控制。而springIOC是怎么做的呢?...

邓gf阅读 800

Java项目是不是分布式,真有那么重要吗?
「微服务」「分布式」在我刚毕业的时候还是比较关注的,那时候还入门了一把SpringCloud,写了一篇很长的文章,还是很顶的,有不少的大号都给我转载了,在知乎又获得了很多的赞。

Java3y2阅读 575评论 1

Spring Framework IOC 原理
Spring Framework 提供了除IOC之外的很多有意思的功能,深入研究其技术原理,可在项目技术选型上提供更多的思路和技术把控。Spring Framewrok 代码由大佬精心打磨,可以从功能实现上学习和模仿。另外Spring Frame...

Mario1阅读 694

线上FullGC问题排查实践——手把手教你排查线上问题 | 京东云技术团队
观察该机器日志发现,此时有很多线程在执行跑批任务。正常来说,跑批任务是低CPU高内存型,所以此时考虑是FullGC引起的大量CPU占用(之前有类似情况,告知用户后重启应用后解决问题)。

京东云开发者2阅读 325

封面图
手写模拟Spring底层原理-Bean的创建与获取
大家好,相信大家对Spring的底层原理都有一定的了解,这里我们会针对Spring底层原理,在海量的Spring源代码中进行抽丝剥茧手动实现一个Spring简易版本,来促进我们对Spring架构有个更深的理解,对Spring的常用功...

京东云开发者1阅读 617

封面图
SpringBoot可以同时处理多少请求?
我们都知道,SpringBoot默认的内嵌容器是Tomcat,也就是我们的程序实际上是运行在Tomcat里的。所以与其说SpringBoot可以处理多少请求,倒不如说Tomcat可以处理多少请求。

码猿技术专栏1阅读 594

保姆级实战验证Mysql InnoDB四种事物隔离级别
事物:用来保证一组操作,要么全部成功要么全部失败隔离:因为在高并发情况下大概率会出现多个事物同时操作同一个数据,如果事物之间不进行隔离可能会出现意想不到的问题

idgq1阅读 523

封面图
1 声望
1 粉丝
宣传栏