springBoot项目中我们常常会有比较耗时的操作,而前端不关心你的处理结果时。比如给用户发送邮件,此时,我们就可以在用户操作时使用异步来完成发送邮件,不需要等邮件发送完成后再给到前端相应。下面详细介绍一下具体步骤:
- 首先可以再项目中添加线程池相关配置
@Configuration
@EnableAsync
public class AsyncConfig {
private int corePoolSize = 10;
private int maxPoolSize = 200;
private int queueCapacity = 10;
private String ThreadNamePrefix = "asyncExecutor-";
@Bean
public Executor asyncExecutor() {
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
executor.setCorePoolSize(corePoolSize);
executor.setMaxPoolSize(maxPoolSize);
executor.setQueueCapacity(queueCapacity);
executor.setThreadNamePrefix(ThreadNamePrefix);
// rejection-policy:当pool已经达到max size的时候,如何处理新任务
// CALLER_RUNS:不在新线程中执行任务,而是有调用者所在的线程来执行
executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
executor.initialize();
return executor;
}
}
- 新建一个类,类加上@Component 注解,方法上加@Async 注解,代表异步调用方法,以下为发送邮件demo
@Async
public void sendHtmlMail(String to, String subject, String content){
MimeMessage message=javaMailSender.createMimeMessage();
try {
//true表示需要创建一个multipart message
MimeMessageHelper helper=new MimeMessageHelper(message,true);
helper.setFrom(form);
helper.setTo(to);
helper.setSubject(subject);
helper.setText(content,true);
javaMailSender.send(message);
System.out.println("html格式邮件发送成功");
}catch (Exception e){
System.out.println("html格式邮件发送失败");
}
}
- 最后在springBoot启动类上加@EnableAsync注解。然后再需要调用异步方法的地方,注入调用即可
- ps 调用异步的方法与异步方法不能在同一个类中。