service调用service的事务
时间: 2023-08-12 18:04:07 浏览: 106
在 Service 调用 Service 的场景中,如果需要控制事务,可以使用 Spring 提供的声明式事务来管理事务。具体步骤如下:
1. 在调用 Service 方法的 Service 中配置事务管理器和事务通知。
```xml
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="*" propagation="REQUIRED" />
</tx:attributes>
</tx:advice>
<aop:config>
<aop:pointcut id="servicePointcut" expression="execution(* com.example.service..*.*(..))" />
<aop:advisor advice-ref="txAdvice" pointcut-ref="servicePointcut" />
</aop:config>
```
2. 在被调用的 Service 方法中添加事务注解。
```java
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserDao userDao;
@Transactional
public void updateUserInfo(User user) {
userDao.updateUser(user);
}
}
```
3. 在调用 Service 方法的 Service 中注入被调用的 Service。
```java
@Service
public class OrderServiceImpl implements OrderService {
@Autowired
private UserService userService;
@Transactional
public void createOrder(Order order) {
// 创建订单
orderDao.createOrder(order);
// 更新用户信息
User user = new User();
user.setId(order.getUserId());
user.setName(order.getUserName());
userService.updateUserInfo(user);
}
}
```
通过以上配置,调用 Service 的 Service 在执行方法时会将事务传递给被调用的 Service,如果被调用的 Service 中发生异常,整个事务会回滚,确保数据的一致性和完整性。
阅读全文