@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,转载请注明。