Прежде всего, вы должны создать класс обработчика исключений, подобный следующему;
@Component
public class AsyncExceptionHandler implements AsyncUncaughtExceptionHandler {
private final Logger logger = LoggerFactory.getLogger(AsyncExceptionHandler.class);
@Override
public void handleUncaughtException(Throwable ex, Method method, Object... params) {
logger.error("Unexpected asynchronous exception at : "
+ method.getDeclaringClass().getName() + "." + method.getName(), ex);
}
}
После этого вы должны настроить свой класс обработчика исключений в вашей конфигурации, как показано ниже:
@Configuration
@EnableAsync
public class AsyncConfig extends AsyncConfigurerSupport {
@Autowired
private AsyncExceptionHandler asyncExceptionHandler;
@Override
public AsyncUncaughtExceptionHandler getAsyncUncaughtExceptionHandler() {
return asyncExceptionHandler;
}
}
Примечание. Опциональный обработчик исключений - это опция. Вы можете создать новый экземпляр для каждого исключения. Мой совет - использовать Injection для класса обработчика исключений, потому что область действия Spring по умолчанию - singleton, поэтому нет необходимости создавать новый экземпляр для каждого исключения.