Spring Async方法隐藏了异常

时间:2014-07-18 09:59:26

标签: java spring asynchronous jasper-reports

我对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

我的麻烦不是例外本身,但为什么异步方法无法捕获它?

1 个答案:

答案 0 :(得分:1)

究竟是哪种方法@Async?如果您正在运行异步方法,则应始终使用Future作为结果类型。如果提供void方法,则无法传输(异步)线程中发生的任何异常。

有无效方法的捕捉。简而言之:Spring Framework 4.1允许您为这类事情注册异常处理程序,请检查SPR-8995。 4.1.如果你想尝试,很快就会有.RC1。