java中 方法调用方法 两个方法分别开启事务
时间: 2024-03-22 07:41:47 浏览: 206
在 Java 中,如果一个方法需要调用另一个方法,且两个方法都需要开启事务,可以使用 Spring 提供的声明式事务管理来实现。具体如下:
1. 在 Spring 的配置文件中,开启事务管理器。
```xml
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>
<tx:annotation-driven transaction-manager="transactionManager" />
```
2. 在需要开启事务的方法上加上 `@Transactional` 注解,指定事务的传播行为为 `Propagation.REQUIRED`,表示如果当前存在事务,则加入该事务,如果不存在事务,则创建一个新事务。
```java
@Transactional(propagation = Propagation.REQUIRED)
public void methodA() {
// do something
methodB();
}
@Transactional(propagation = Propagation.REQUIRED)
public void methodB() {
// do something
}
```
在以上代码中,当 `methodA()` 被调用时,会开启一个事务,并调用 `methodB()`,由于 `methodB()` 也被标注了 `@Transactional` 注解,因此会加入到 `methodA()` 开启的事务中。如果 `methodB()` 抛出了异常,则整个事务都会回滚。
注意,如果两个方法不是在同一个类中,需要通过依赖注入的方式调用另一个方法,并且调用的方法不能使用 `private` 修饰符,因为 Spring 是通过代理来管理事务的,如果方法是私有的,代理将无法访问到该方法。所以需要将方法的访问修饰符设置为 `public` 或 `protected`。
阅读全文