spring boot 中异步Async的使用
·
- 在项目中,我们一般会和第三方去交互,比如发送短信验证码,比如发送邮件,那么,在请求这些第三方时,有可能就会造成等待,那么对用户的体验是非常不好的,那么就需要我们异步去执行这些浪费时间的操作,而不需要一直等待堵塞到那里,那在spring boot 里面是如何实现的那?利用Async
- 在启动项中开启异步@EnableAsync(proxyTargetClass=true)

- server层
import org.springframework.scheduling.annotation.Async;
public interface AsyncServer {
// 发送邮件
@Async
void SendMail(String mail, String randomNum);
// 发送短信
@Async
void SendMessage();
}
import com.automobile.biz.server.AsyncServer;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.mail.MailException;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSenderImpl;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;
@Service
public class AsyncServerImpl implements AsyncServer {
@Autowired
private JavaMailSenderImpl mailSender;
@Value("${spring.mail.username}")
private String mailFrom;
// 异步发送邮件
@Override
@Async
public void SendMail(String mail, String randomNum){
//创建简单邮件消息
SimpleMailMessage message = new SimpleMailMessage();
//谁发的
message.setFrom(mailFrom);
//谁要接收
message.setTo(mail);
//邮件标题
message.setSubject("xxxx");
//邮件内容
message.setText("xxxx邮件,请在该平台填写验证码:" + randomNum);
try {
mailSender.send(message);
} catch (MailException e) {
e.printStackTrace();
}
}
// 异步发送短信
@Override
@Async
public void SendMessage(){
System.out.println("我就是一个发送短信的模板!");
}
}
- 另一个server层中调用
// 处理邮件逻辑
@Override
public RetInfo SendMailLogic(String mailbox){
// 异步调用发送邮件,避免等待
asyncServer.SendMail(mailbox, randomString);
return RetInfo.success();
}
- 注意事项:异步类和调用类不可放在一个类中,比如上面的例子调用时使用this.SendMail(mailbox, randomString);去调用,那么被调用方法 和 调用处的代码都处在同一个类,所以只是相当于本类调用, 从而@Async并不会产生效果,还相当于同步
更多推荐
所有评论(0)