我为springboot控制器编写了一段java代码:
@GetMapping("/exception")
public void exceptionInThread() {
Thread newThread = new Thread(new Runnable() {
@Override
public void run() {
throw new NullPointerException();
}
});
log.info("daemon: {}, threadGroup: {}, defaultUncaught: {}",
newThread.isDaemon(),
newThread.getThreadGroup(),
Thread.getDefaultUncaughtExceptionHandler()
);
newThread.start();
}
编译项目后,我运行java -jar application.jar
并调用restapi(http://localhost:8080/exception)。我可以获得NPE跟踪。
但是在我们的生产环境中,我们将sprintboot编译为WAR并将WAR放入Tomcat的webapps目录中。然后发生了奇怪的事情。当我触发restapi来运行该方法时,没有弹出任何NPE跟踪。好像在其下面设置了默认的未捕获异常处理程序,它在没有跟踪的情况下使用异常。但是我打印的应用程序日志在两种环境中都是相同的(sprintboot application& tomcat webapp):
2017-07-19 10:35:33.479 INFO 38070 --- [nio-8080-exec-1] com.ruan.restful.ThreadController : daemon: true, threadGroup: java.lang.ThreadGroup[name=main,maxpri=10], defaultUncaught: null
这让我很困惑。 Tomcat为我设置了什么?你们能给我一些指示吗?