当EventHandler抛出UnexpectedRollbackException时,Axon框架会将该异常标记为捕获异常,导致该事件的事务被回滚,进而影响到整个应用程序的事务。为了正确处理该异常,可以在Axon配置中添加以下代码:
@Configuration
public class AxonConfig {
@Bean
public ErrorHandler errorHandler(ErrorContextProvider errorContextProvider) {
return new ErrorHandlerSubscriber(errorContextProvider) {
@Override
protected void handle(Exception exception, EventMessage> eventMessage) {
if (exception instanceof UnexpectedRollbackException) {
logger.warn("UnexpectedRollbackException occurred in EventHandler for event: {}",
eventMessage.getPayloadType().getSimpleName());
} else {
super.handle(exception, eventMessage);
}
}
};
}
}
在上述代码中,我们定义了一个ErrorHandlerSubscriber类,该类继承了ErrorHandler类,并重写了handle()方法。当异常是UnexpectedRollbackException类型时,我们将异常记录为警告,而不是将其作为捕获异常处理,并通过调用super.handle()方法,将处理委托给父类。这样,我们就可以更好地处理UnexpectedRollbackException异常。