2023年11月29日发(作者:)
@Transactional注解的rollbackFor属性
先回忆下java的异常模型,Throwable是最顶层的⽗类,有Error和Exception两个⼦类。
Error表⽰严重的错误(如OOM等);
Exception可以分为运⾏时异常(RuntimeException及其⼦类)和⾮运⾏时异常(Exception的⼦类中,除了RuntimeException及其⼦类之外
的类)。
⾮运⾏时异常是检查异常(checked exceptions),⼀定要try catch,因为这类异常是可预料的,编译阶段就检查的出来;
Error和运⾏时异常是⾮检查异常(unchecked exceptions),不需要try catch,因为这类异常是不可预料的,编辑阶段不会检查,
没必要检
查,也检查不出来
。
spring的@Transactional注解可以很⽅便的开启事务,但是,即Exception的⼦类
默认只在遇到运⾏时异常和Error时才会回滚,⾮运⾏时异常不回滚
中,除了RuntimeException及其⼦类,其他的类默认不回滚(不知道为什么要这样设计?)
⽽rollbackFor属性可以解决这个问题,
下⾯是关于@Transactional注解的⼀些实验
实验⼀
不加rollbackFor属性,抛出RuntimeException,正常回滚
@Transactional
@Transactional()
public void save(){
StudentDO studentDO = new StudentDO();
e("ltm");
(22);
(studentDO);
throw new OutOfMemoryError();
发布评论