前言
最近项目上有一个使用事务相对复杂的业务场景报错了。在绝大多数情况下,都是风平浪静,没有问题。其实内在暗流涌动,在有些异常情况下就会报错,这种偶然性的问题很有可能就会在暴露到生产上造成事故,那究竟是怎么回事呢?
问题描述
我们用一个简单的例子模拟下,大家也可以看看下面这段代码输出的结果是什么。
- 在类
SecondTransactionService
定义一个简单接口transaction2
,插入一个用户,同时必然会抛出错误
java
复制代码
@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
处理
java
复制代码
@Override @Transactional(rollbackFor = Exception.class) public voi