对于一些耗时较长的运算或者数据处理,在客户端对请求响应要求较高时,我们可以采用异步的方式,先返回客户端通知,然后自动异步执行程序。本文使用 @Async注解实现。
1.先搞一个线程池,为啥要用线程池?该用的时候自然就用,这里。不啰嗦线程池的问题,不是本文重点
@Configuration
public class TaskExecutorConfig {
@Value("${executor.corePoolSize:1}")
private Integer corePoolSize;
@Bean
public TaskExecutor testExecutor() {
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
// 设置核心线程数
executor.setCorePoolSize(corePoolSize);
// 设置最大线程数
executor.setMaxPoolSize(corePoolSize);
// 设置队列容量
executor.setQueueCapacity(999);
// 设置线程活跃时间(秒)
executor.setKeepAliveSeconds(360);
// 设置默认线程名称
executor.setThreadNamePrefix("dwg-");
// 设置拒绝策略
executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
// 等待所有任务结束后再关闭线程池
executor.setWaitForTask