我有一个Spring @Async方法,它返回Future对象。我做了一个异常处理程序和一些日志记录当我检查日志时,我看到错误和堆栈跟踪,但看不到线程名称(只是提到的主线程名称),异常发生的地方。是否有可能从Future对象获取线程名称,以使日志清楚地说明哪个线程确实发生了失败?
我只看到一个解决方法:在我的@Async方法中创建try catch块并从中进行记录。虽然我认为可以从Future对象获取线程名称吗?
在我的主线程中,我等待完成任务:
for (Future<SearchRequest> future:futureList){
try {
SearchRequest searchRequest = future.get();
doneSearchRequests+=1;
log.info("Progress: "+doneSearchRequests+
" search requests done of "+ searchRequestsNumber+
" ("+Math.round(100*doneSearchRequests/searchRequestsNumber)+"%)");
} catch (InterruptedException e) {
log.warn("Error while wait catalogPageService result. ",e);
} catch (ExecutionException e) {
log.warn("Error while wait catalogPageService result. ",e);
}
}
futureList 包含异步方法调用结果
的集合这里是日志记录样本。提到的主线程名称,但没有关于执行器线程名称的信息,其中发生此异常:
2017-09-23 23:37:19.711 WARN 7986 --- [ main] h.service.salary.location.CatalogImpl : Error while wait catalogPageService result.