springboot异步多线程发邮件
二、实现异步发送邮件
在SpringBoot项目中开启异步多线程非常简单,只需要下面几个步骤即可。
在主类上面开启@EnableAsync注解
……
@EnableAsync
public class EmosWxApiApplication {
……
@Configuration
public class ThreadPoolConfig {
@Bean("AsyncTaskExecutor")
public AsyncTaskExecutor taskExecutor() {
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
// 设置核心线程数
executor.setCorePoolSize(8);
// 设置最大线程数
executor.setMaxPoolSize(16);
// 设置队列容量
executor.setQueueCapacity(32);
// 设置线程活跃时间(秒)
executor.setKeepAliveSeconds(60);
// 设置默认线程名称
executor.setThreadNamePrefix("task-");
// 设置拒绝策略
executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
executor.initialize();
return executor;
}
}
在com.example.emos.wx.task中创建EmailTask类,定义线程任务
@Component
@Scope("prototype")
public class EmailTask implements Serializable {
@Autowired
private JavaMailSender javaMailSender;
@Value("${emos.email.system}")
private String mailbox;
@Async("AsyncTaskExecutor")
public void sendAsync(SimpleMailMessage message){
message.setFrom(mailbox);
javaMailSender.send(message);
}
}
@Value("${emos.email.hr}")
private String hrEmail;
@Autowired
private EmailTask emailTask;
HashMap<String, String> map = userDao.searchNameAndDept(userId);
String name = map.get("name");
String deptName = map.get("dept_name");
deptName = deptName != null ? deptName : "";
SimpleMailMessage message = new SimpleMailMessage();
message.setTo(hrEmail);
message.setSubject("员工" + name + "身处高风险疫情地区警告");
message.setText(deptName + "员工" + name + "," + DateUtil.format(new Date(), "yyyy年MM月dd日") + "处于" + address + ",属于新冠疫情高风险地区,请及时与该员工联系,核实情况!");
emailTask.sendAsync(message);
浙公网安备 33010602011771号