我对Async方法有一个奇怪的问题。 如果我以异步方式运行它并且它的工作抛出一些特殊异常,它就不会显示它并且只是停止执行(没有捕获,没有日志)。
我发现它与jasperreport一起使用。 这是故障块代码:
JasperPrint jp1=null;
try{
jp1 = JasperFillManager.fillReport(reportD1, params, new JRBeanCollectionDataSource(ingressi));
}catch(Exception e){
log.error(e);
e.printStackTrace();
throw e;
}
如果此代码在Async注释方法中,则它不会抛出异常并且不会记录(只是停止执行)。 如果我删除了Async注释,它会抛出这个:
java.lang.ClassNotFoundException: org.apache.commons.collections.map.ReferenceMap
我的麻烦不是例外本身,但为什么异步方法无法捕获它?
答案 0 :(得分:1)
究竟是哪种方法@Async
?如果您正在运行异步方法,则应始终使用Future
作为结果类型。如果提供void方法,则无法传输(异步)线程中发生的任何异常。
有无效方法的捕捉。简而言之:Spring Framework 4.1允许您为这类事情注册异常处理程序,请检查SPR-8995。 4.1.如果你想尝试,很快就会有.RC1。