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)作为记录,记者在