У меня есть некоторый асинхронный код в моем весеннем проекте, который выглядит примерно так:
public void someFunction(int param){
CompletableFuture.runAsync(() -> someService.execute(param),executor);
}
В моем проекте много таких функций. Проблема заключается в том, что когда в функции execute () генерируется непроверенное исключение, оно теряется. Я хочу поймать это и зарегистрировать это. Я знаю, что в конце CompletableFuture я могу использовать исключительную функцию (), но я бы предпочел не изменять ее везде и иметь какой-то глобальный обработчик исключений для этих функций.
Я знаю, что весной, когда вы включили Async и у вас есть класс конфигурации, вы можете перезаписать функцию public AsyncUncaughtExceptionHandler getAsyncUncaughtExceptionHandler()
и предоставить реализацию для AsyncUncaughtExceptionHandler, которая будет обрабатывать необработанные исключения из функций, аннотированных с @Async, например:
@Async
public void someFunction(int param){
someService.execute(param);
}
Есть ли способ, которым я мог бы реализовать нечто подобное? Или заставить AsyncUncaughtExceptionHandler перехватывать исключения также из методов, которые не аннотированы с @Async, но имеют вызов runAsync ()? Как бы вы решили эту проблему?