Java spring 的单独交易

Separate transaction on Java spring

我不太确定该怎么做。但我正在寻找一种方法来分离函数的事务。

我有一个处理每条消息结果的侦听器 (messageListener)。在将其发送到下一步 (sendToNextProcess) 之前,我想确保第一笔交易 (updateMessagesResults) 成功。 (也许创建一个单独的交易?)

如何在 Java Spring 上执行此操作?谢谢

public void messageListener(List<Message> messages) {
    resultUpdater.updateMessagesResults(messages);
    sendToNextProcess(messages);
}

注意:监听器和resultUpdater都有@Transactional注解。

谢谢!

sendToNextProcessupdateMessagesResults

上添加 REQUIRES_NEW

并且不要直接调用 sendToNextProcess 因为它不会工作你应该注入当前服务并从这样调用它

@Service
public CurrentService {
    @Autowire
    CurrentService CurrentService;  

    @Transactional
    public void messageListener(List<Message> messages) {
        resultUpdater.updateMessagesResults(messages);
        currentService.sendToNextProcess(messages);
    }

    @Transactional(propagation = Propagation.REQUIRES_NEW)
    public void sendToNextProcess(List<Message> messages) {

    }
}

为什么你应该从注入服务中调用它,因为 @transactional 尝试从 class 范围外包装它,然后尝试用 this 调用它,但它不会像你期望的那样工作