2014-07-18 236 views
1

我有一個異步方法的奇怪問題。 如果我以異步的方式運行它,並且它的作業會拋出一些特殊的異常,它不會顯示它,只是停止執行(沒有捕獲,沒有日誌)。春季異步方法隱藏異常

我發現它與jasperreport一起工作。 這是故障塊碼:

JasperPrint jp1=null; 
try{ 
    jp1 = JasperFillManager.fillReport(reportD1, params, new JRBeanCollectionDataSource(ingressi)); 
}catch(Exception e){ 
    log.error(e); 
    e.printStackTrace(); 
    throw e; 
} 

如果該代碼是一個異步註解的方法在其內部不拋出異常和不記錄(簡單地停止執行)。 如果我刪除異步註釋,它拋出這樣的:

java.lang.ClassNotFoundException: org.apache.commons.collections.map.ReferenceMap 

我的煩惱是不是例外本身,而是爲什麼異步方法不抓住它?

回答

1

究竟哪種方法是@Async?如果您正在運行異步方法,則應始終使用Future作爲結果類型。如果你提供了一個void方法,那麼就沒有辦法傳輸任何在(異步)線程中會發生的異常。

有無效方法。長話短說:Spring Framework 4.1允許你爲這種事情註冊一個異常處理程序,檢查SPR-8995。 4.1.RC1將很快可用,如果你想嘗試。