java事务问题 再a方法中开启默认事务@Transactional 事务提交后执行B方法 B方法开启事务@Transactional B方法内有数据提交 提交时报没有事务正在进行
时间: 2023-10-24 13:13:25 浏览: 89
这个问题可能是因为在B方法内部开启了一个新的事务,但是由于默认情况下,Spring事务是基于AOP实现的,所以在A方法中开启的默认事务并没有被B方法所感知,因此在B方法内提交事务时会报错。
解决这个问题的方式有两种:
1. 在B方法中使用Propagation.REQUIRED_NEW来开启一个新的事务,并且将A方法中的事务挂起,具体实现如下:
```
@Transactional(propagation = Propagation.REQUIRED)
public void methodA() {
// ...
methodB();
// ...
}
@Transactional(propagation = Propagation.REQUIRES_NEW)
public void methodB() {
// ...
}
```
2. 将B方法的事务传播属性设置为Propagation.SUPPORTS,这样B方法将会共享A方法中的事务,具体实现如下:
```
@Transactional
public void methodA() {
// ...
methodB();
// ...
}
@Transactional(propagation = Propagation.SUPPORTS)
public void methodB() {
// ...
}
```
需要注意的是,第二种方式只适用于B方法中不需要进行数据修改操作的情况。如果B方法中需要进行数据修改操作,则需要使用第一种方式来解决该问题。
阅读全文