我的 spring-boot 1.3.5.RELEASE 应用程序上有一个 REST API,使用 ThreadPoolExecutor 从中异步启动一个进程。
我的问题是,异步进程恰好会针对未处理的场景抛出运行时异常,但堆栈跟踪不会进入我的日志。我正在使用 log4j。
这是一个大问题,因为需要花费大量时间来调试并查看实际问题是什么。
我知道@ControllerAdvice,但我认为当新线程启动并且spring不再拦截异常时,上下文就结束了。
如何配置 ThreadPoolExecutor 将未捕获的异常重定向到 spring 上下文,或者我应该如何解决这个问题?
我正在寻找一种通用解决方案来捕获这些类型的异常并将其堆栈跟踪添加到附加程序,因为我不知道开发人员将在哪里启动一个新线程,该线程将因未捕获的异常而崩溃
假设其余部分如下所示:
@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");
});
}
最佳答案
您是否尝试过创建 @ControllerAdvice,向其中注入(inject) Throwable 并调用日志记录?
关于java - spring-boot 记录新线程的运行时异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40178714/