Java @TransactionalEventListener(fallbackExecution=true)在提交之前运行

Java @TransactionalEventListener(fallbackExecution=true)在提交之前运行,java,spring,events,asynchronous,transactions,Java,Spring,Events,Asynchronous,Transactions,我有一个@Service类,它在Spring@Transactional方法中运行一些逻辑 该方法通过将isCompleted标志设置为true来“完成”流程 然后它更新数据库中的进程并启动ProcessCompletedEvent 用@TransactionalEventListener(fallbackExecution=true)注释的异步ProcessCompletedEventListener将拾取已启动的ProcessCompletedEvent,如果已完成进程的数量等于一,则执行一

我有一个
@Service
类,它在Spring
@Transactional
方法中运行一些逻辑

该方法通过将isCompleted标志设置为true来“完成”流程

然后它更新数据库中的进程并启动ProcessCompletedEvent

@TransactionalEventListener(fallbackExecution=true)注释的异步ProcessCompletedEventListener将拾取已启动的ProcessCompletedEvent,如果已完成进程的数量等于一,则执行一些附加逻辑

以下是一些示例代码:

@Service
public class ProcessService {

    @Override
    @Transactional
    public Process completeProcess(Process process) throws ServiceException {

        process.setCompleted(true);
        process = processDao.update(process);

        eventPublisher.publishEvent(new ProcessCompletedEvent(process));

        return process;
    }
}

@Component
public class ProcessCompletedListener {

    @TransactionalEventListener(fallbackExecution = true)
    public void doStuffWhenFirstProcess(ProcessCompletedEvent event) {

        Process process = event.getProcess();

        //Thread.sleep(1000) <- Uncomment this, and everything works
        if (processService.getNumberOfCompletedProcesses(process.getUser()) == 1) {

            doStuff();

        }
    }
@服务
公共类处理服务{
@凌驾
@交易的
公共进程completeProcess(进程进程)引发ServiceException{
进程。setCompleted(true);
process=processDao.update(进程);
publishEvent(新的ProcessCompletedEvent(process));
返回过程;
}
}
@组成部分
公共类ProcessCompletedListener{
@TransactionalEventListener(fallbackExecution=true)
公共无效doStuffWhenFirstProcess(ProcessCompletedEvent事件){
Process进程=event.getProcess();

//Thread.sleep(1000)作为记录,记者在