代码是这样的
public class test{
private Logger logger = LoggerFactory.getLogger(this.getClass());
/**
- 异步发送邮件
**/
@Async
@Override
public void sendEmailAsync(List testPOS, String status){
for (testPO testPO : testPOS) {
BaseRequestDto requestDto = new BaseRequestDto();
SendMailReqDto reqDto = new SendMailReqDto();
boolean statusFlag = true;
try {
reqDto.setContentType(“HTML”);
reqDto.setContent(“您好,感谢您光顾我的博客,希望我们一同成长,这是邮件内容”);
reqDto.setMailTitle(“邮件标题”);
reqDto.setFromNickName(“发送人名称”);
reqDto.setToMailAddress(“aa@123.com”);
requestDto.setRequest(reqDto);
BaseResponseDto dto = mailService.sendMail(requestDto);
testMapper.updateStatus(status, testPO.getId());
} catch (Exception e){
logger.info(“邮件发送之后遇到异常”);
status = EmailNotifyStatus.EXCEPTION.getValue();
testMapper.updateStatus(status, testPO.getId());
}
}
}
}
这样会发现,假设我邮箱地址填的不对或者其他有错误,后台会报错,报错之后会接着往下走,不会跳到catch之后的代码块,经过一通操作,又是在方法上加throw,又是改方法返回类型的,最后发现是因为调用的sendMail方法是在其方法内部加了个try catch 异常在内部处理了,抛出来之后到我们写的调用方法之后还是会继续走;那问题找到了,如何解决呢,需要通过调用sendMail方法之后返回的code码,正确的走正确的数据应该保存的流程,错误的走错误数据应该保存的流程。
修改之后:
public class test{
private Logger logger = LoggerFactory.getLogger(this.getClass());
/**
- 异步发送邮件
**/
@Async
@Override
public void sendEmailAsync(List testPOS, String status){
for (testPO testPO : testPOS) {
BaseRequestDto requestDto = new BaseRequestDto();
SendMailReqDto reqDto = new SendMailReqDto();
boolean statusFlag = true;
try {
reqDto.setContentType(“HTML”);
reqDto.setContent(“您好,感谢您光顾我的博客,希望我们一同成长,这是邮件内容”);
reqDto.setMailTitle(“邮件标题”);
reqDto.setFromNickName(“发送人名称”);
reqDto.setToMailAddress(“aa@123.com”);
requestDto.setRequest(reqDto);
BaseResponseDto dto = mailService.sendMail(requestDto);
if(“0”.equals(dto.getCode())){
status = “发送成功”;
logger.info(“发送邮件成功”);
} else {
status = “发送失败”;
statusFlag = false;
logger.info(“发送邮件报错”);
}
testMapper.updateStatus(status, testPO.getId());
} catch (Exception e){
logger.info(“邮件发送之后遇到异常”);
status = “发送失败”;
if(statusFlag){
testMapper.updateStatus(status, testPO.getId());
}
}
}
}
该博客讨论了在Java中使用@Async注解异步发送邮件时遇到的问题。原来的方法在邮件发送失败后仍会继续执行,导致数据更新错误。解决方案是检查邮件服务返回的错误代码,并根据代码判断邮件发送状态,正确处理成功和失败的情况,确保数据保存的准确性。通过在sendMail方法调用后检查返回的code码,实现了异常情况下的正确流程控制。
826

被折叠的 条评论
为什么被折叠?



