来自新线程

时间:2016-10-21 14:03:48

标签: java spring multithreading logging exception-handling

我的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");
    });
}

1 个答案:

答案 0 :(得分:0)

您是否尝试过创建@ControllerAdvice,将Throwable注入其中并调用日志记录?