Spring数据交易控制

时间:2018-11-08 05:25:19

标签: java spring spring-boot spring-data-jpa spring-transactions

问题是关于在crudrepository,jparepository ext中使用多个事务。在我的项目中,有两个实体。 RequestEntity和SendingMailEntity。我的方法中的WorkFlow:

1)保存RequestEntity,

2)发送信息服务(这是我们购买的一项REST服务。我们无法控制其任何异常。)

3)保存SendingMailEntity。

当2号或3号出现异常时,由于受spring jpa控制的回滚,我们丢失了requestEntity。

requestEntity的记录永远不会丢失。

@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不会保存。

1 个答案:

答案 0 :(得分:1)

处理sendMail中的所有异常,不要让它返回给调用函数。

如果单独的异常处理不起作用,您还可以尝试使用sendMailoverride移到新的公共类中