@Async
方法不会向调用线程抛出异常。这意味着您需要在 @Async
方法中正确处理异常,否则它们将丢失。
错误示范
@Service public class EmailService { @Async public void sendEmail() throws Exception{ throw new Exception("Oops, cannot send email!"); } } @Service public class PurchaseService { @Autowired private EmailService emailService; public void purchase(){ try{ emailService.sendEmail(); }catch (Exception e){ System.out.println("Caught exception: " + e.getMessage()); } } }
正确示范
@Service public class EmailService { @Async public Future<String> sendEmail() throws Exception{ throw new Exception("Oops, cannot send email!"); } } @Service public class PurchaseService { @Autowired private EmailService emailService; public void purchase(){ try{ Future<String> future = emailService.sendEmail(); String result = future.get(); System.out.println("Result: " + result); }catch (Exception e){ System.out.println("Caught exception: " + e.getMessage()); } } }
本文作者为DBC,转载请注明。