我的spring-boot 1.3.5.RELEASE应用程序上有一个rest API,使用ThreadPoolExecutor从中异步启动进程。
我的问题是,异步过程恰好为未处理的场景抛出运行时异常,但堆栈跟踪不在我的日志中。我正在使用log4j。
这是一个大问题,因为它需要花费大量时间来调试并查看实际问题。
我知道@ControllerAdvice,但我认为当新线程启动并且spring不再拦截异常时,它的上下文结束。
如何配置ThreadPoolExecutor以将未处理的异常重定向到spring上下文,或者我该如何处理此问题?
我正在寻找一个通用的解决方案来捕获这些类型的异常,并将它们的堆栈跟踪添加到appender,因为我不知道开发人员将在哪里启动一个新的线程,该线程会因未捕获的异常而崩溃
让我们说其余的看起来像这样:
@RequestMapping("/api/test")
public void doSomething() {
ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(10, 10, 10 , TimeUnit.SECONDS, new ArrayBlockingQueue<>(10, true));
threadPoolExecutor.execute(() -> {
throw new RuntimeException("some exception");
});
}
答案 0 :(得分:0)
您是否尝试过创建@ControllerAdvice,将Throwable注入其中并调用日志记录?