Java Spring数据事务控制
问题是关于在Crudepository、jparepository ext中使用多个事务。在我的项目中,有两个实体。RequestEntity和SendingMailEntity。我的方法中的工作流: 1) 保存请求实体 2) 发送信息服务(这是我们购买的rest服务,我们无法控制任何异常。) 3) 保存SendingMailEntity 当2号或3号出现异常时,由于SpringJPA控制的回滚,我们丢失了requestEntity requestEntity的记录永远不会丢失Java Spring数据事务控制,java,spring,spring-boot,spring-data-jpa,spring-transactions,Java,Spring,Spring Boot,Spring Data Jpa,Spring Transactions,问题是关于在Crudepository、jparepository ext中使用多个事务。在我的项目中,有两个实体。RequestEntity和SendingMailEntity。我的方法中的工作流: 1) 保存请求实体 2) 发送信息服务(这是我们购买的rest服务,我们无法控制任何异常。) 3) 保存SendingMailEntity 当2号或3号出现异常时,由于SpringJPA控制的回滚,我们丢失了requestEntity requestEntity的记录永远不会丢失 @Transac
@Transactional
public RequestEntity create(RequestEntity entity) {
entity=requestRepository.save(entity);
sendMail(entity);
}
@Transactional(propagation=Propagation.REQUIRES_NEW)
public SendingMailEntity sendMail(RequestEntity entity) {
/*
*
*/
informationService(entity.*,*,*);
/*
*
*/
sendingMailRepository.save(sendingMailEntity);
}
此代码块不工作。当sendMail出现错误时,RequestEntity不会保存。处理sendMail中的所有异常,不要让它返回调用函数
此外,您还可以尝试将
sendMail
移动到具有覆盖的新公共类中
,如果单独的异常处理不起作用如果您无法控制“informationService”,那么为什么要将其包括在事务中。如果整个过程不是原子的,那么将失败的代码从事务中分离出来,或者正确地处理异常。您是否尝试过传播=不支持我尝试过,但它不起作用。实际上,这是关于改掉旧习惯。当使用hibernate会话时,我们可以根据需要在线提交或回滚。我无法控制spring数据。