spring 事务加try catch就不回滚 @Transactional加上(rollbackFor = { Exception.class }),下面catch里面还需要手动回滚或抛运行异常了吗?

Jordan裔 发布于 04/17 09:00
阅读 6K+
收藏 2

spring 事务加try catch就不回滚, @Transactional加上(rollbackFor = { Exception.class }) ,下面catch里面还需要手动回滚或抛运行异常了吗?

加载中
0
Kit_lee
Kit_lee

1、你要在try catch里throw那个异常,如果不抛,事务根本不会回滚

2、@Transactional标签默认会对RuntimeException异常进行回滚,如果你抛出的异常不是继承自RuntimeException,那需要你指定回滚的异常是什么异常,也就是你写的 rollbackFor = { Exception.class }

Jordan裔
Jordan裔
回复 @Kit_lee : 谢谢
Kit_lee
Kit_lee
回复 @Jordan裔 : 是的
Jordan裔
Jordan裔
这样啊 那我不抛异常进行回滚 使用手动回滚 是不是注解上不需要写rollbackFor = { Exception.class }啊
0
caohenghui
caohenghui

TransactionAspectSupport 手动回滚

0
idoz
idoz

spring 封装的transaction 默认只处理RuntimeException  以及Error

0
zyndev
zyndev
抛出异常,事务采用的环绕通知,也就是你这个方法需要抛出异常,通知才会捕获到,
Jordan裔
Jordan裔
那rollbackFor = { Exception.class }还需要加么
0
一只小桃子
一只小桃子

catch里面要抛出来,不然代理类怎么知道你有没有异常

Jordan裔
Jordan裔
那rollbackFor = { Exception.class } 这个还需要加么
0
b
blysin_18

异常需要被spring捕获到才能回滚,如果你自己捕获就需要在catch中将该异常再次向上抛出

0
35Niu
35Niu

 



@Transactional
public boolean verify(String license) {

// 执行过程中的 runtime exception 会由 spring 捕获,并回滚之前执行的 sql

// 在 Transactional 内部,不要 try,catch。  返回一个外层可判断的 boolean 或其他对象即可。

}

 

返回顶部
顶部