前言
最近项目上有一个使用事务相对复杂的业务场景报错了。在绝大多数情况下,都是风平浪静,没有问题。其实内在暗流涌动,在有些异常情况下就会报错,这种偶然性的问题很有可能就会在暴露到生产上造成事故,那究竟是怎么回事呢?
问题描述
我们用一个简单的例子模拟下,大家也可以看看下面这段代码输出的结果是什么。
- 在类
SecondTransactionService
定义一个简单接口transaction2
,插入一个用户,同时必然会抛出错误
@Override
@Transactional(rollbackFor = Exception.class)
public void transaction2() {
System.out.println("do transaction2.....");
User user = new User("tx2", "111", 18);
// 插入一个用户
userService.insertUser(user);
// 跑错了
throw new RuntimeException();
}
复制代码
- 在另外一个类
FirstTransactionService
定义一个接口transaction1
,它调用transaction2
方法,同时做了try catch
处理
@Override
@Transactional(rollbackFor = Exception.class)
public void transaction1() {
System.out.println(&#