Есть контекст со слушателем.
@Override
public void onStartup(ServletContext servletContext) throws ServletException {
servletContext.addListener(SentryServletRequestListener.class);
super.onStartup(servletContext);
}
и два метода. Один из них помечен аннотацией @Async
@Async
public void send(Long providerId, String name, String email) {
throw new RuntimeException();
}
public void load(Long providerId, String name, String email) {
throw new RuntimeException();
}
Слушатель реагирует на исключения НЕ асинхронных методов. Вопрос: можно ли настроить и как, чтобы реакция была и на исключения из АСИНХРОННЫХ методов. Заранее спасибо
Асинхронные методы выполняются в отдельном потоке, возникающие исключения в нём и остаются, вызывающий поток о них никак узнать не может. Для обработки асинхронных исключения нужно объявить отдельный слушатель:
public class MyAsyncExceptionHandler implements AsyncUncaughtExceptionHandler {
@Override
public void handleUncaughtException(Throwable throwable, Method method, Object... obj) {
System.out.println("Exception message - " + throwable.getMessage());
System.out.println("Method name - " + method.getName());
for (Object param : obj) {
System.out.println("Parameter value - " + param);
}
}
}
И зарегистрировать его в контексте:
<task:annotation-driven executor="someExecutorBean" exception-handler="asyncExceptionHandler"/>
<bean id="asyncExceptionHandler" class="com.example.MyAsyncExceptionHandler"/>
Или, если у вас используется java-конфигурация:
@Configuration
@EnableAsync
public class SpringAsyncConfig implements AsyncConfigurer {
@Override
public Executor getAsyncExecutor() {
return new ThreadPoolTaskExecutor();
}
@Override
public AsyncUncaughtExceptionHandler getAsyncUncaughtExceptionHandler() {
return new MyAsyncExceptionHandler();
}
}
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Как передать переменную из Phonegap 7 JS в Android Java? Я читал на SO анлгоязычные решения, но многие они либо старые, либо просто не подходят в моём случае
Мой тул заменяет текст файлов (их название и/или содержимое)Собственно для этих целей мне нужно, как иметь возможность выбирать название...
При попытке создать фрагмент внутри DialogFragment приложение вылетает, а в стэктрэйсе такое описание проблемы:
Есть сервер, на нем некоторый класс, при создании объекта которого начинается отсчет времениОтсчет идет до тех пор пока существует объект