在Spring Boot]项目中开启异步多线程非常简单,只需要下面几个步骤即可。
一、首先在启动类上面加@EnableAsync注解
二、在配置文件中加入以下配置信息
spring:
mail:
default-encoding: UTF-8
host: smtp.163.com
username: *********@163.com
password: 此处是密码
如果说是系统内部邮件,可以加入以下灵活配置
工程名:
email:
system:*****@163.com
leader:******@qq.com
三、加入线程的配置代码
@Configuration
public class ThreadPoolConfig {
@Bean("AsyncTaskExecutor")
public AsyncTaskExecutor taskExecutor() {
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
//设置核心线程数
executor.setCorePoolSize(5);
//设置最大线程数
executor.setMaxPoolSize(10);
//设置队列容量
executor.setQueueCapacity(100);
//设置线程活跃时间---秒
executor.setKeepAliveSeconds(60);
//设置默认线程名称
executor.setThreadNamePrefix("task-");
//设置拒绝策略
//此策略提供简单的反馈控制机制,能够减缓新任务的提交速度。
executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
executor.initialize();
return executor;
}
}
四、创建邮件任务类,定义线程任务
@Component
@Scope("prototype")
public class EmailTask implements Serializable {
@Autowired
private JavaMailSender mailSender;
//在配置文件中配置的信息
@Value("${emos.email.system}")
private String systemEmail;
//异步执行注解
@Async
public void sendAsync(SimpleMailMessage message) {
// 设置发件人
message.setFrom(systemEmail);
mailSender.send(message);
}
}
五、编写业务代码
@Autowired
private EmailTask emailTask;
public void testEmail(){
String name = "张三";
String deptName = "程序员";
String address="商丘市";
SimpleMailMessage message = new SimpleMailMessage();
message.setTo("admin@163.com");
message.setText(deptName+"员工"+name+","+DateUtil.format(new Date(), "yyyy年MM月dd日") + "处于" + address + ",属于新冠疫情高风险地区,请及时与该员工联系,核实情况!");
emailTask.sendAsync(message);
}
六、最后自己测试即可