Spring保存记录并发送消息回滚

时间:2017-05-06 20:42:59

标签: java spring spring-data

我有一个班级:

@Service
@Transactional
class MyService{
   @Autowired MyTableRepository repository;
   @Autowired FacebookMessageSender sender;

   public void updateTableAndSendMessage(MyTable m){
      m.setProcessed(1);
      repository.save(m);
      sender.sendMessageToFacebook(m);
   }
}

代码中的某处:

List<MyTable> list=repository.findByProcessed(0);
for(MyTable m:list){
   myService.process(m);
}

所以,我有以下内容: 在石英作业中,我检索处理标志设置为0的所有记录。然后我将其传递给服务,然后处理标志变为1并且系统将消息发送到Facebook messenger(无论在哪里)。但是,如果发生sql异常,在'process'方法执行之前或之后,事务将被回滚并且标志将仍为0.因此Facebook消息将在下次作业启动时发送,并且一次又一次。我试图将其分解为2种方法,一种是保存标志其他发送消息。但是,如果没有发送消息,我将不得不回滚该事务呢?所以这就像死锁一样。我需要阻止FB消息在其他异常上发送,并且在FB发送失败时回滚DB更改。如何在spring-data中执行此操作,afaik事务将在方法结束后提交。感谢

0 个答案:

没有答案