项目里有一些业务场景比较独立,需要异步进行操作,比如发邮件、发短信、不需要实时结果的复杂计算,与主线程无关。可以使这些方法异步进行,不影响主程序。
SpringBoot 使用@EnableSync 开启多线程,也可以通过yml文件进行配置。
可以在Yml 文件里进行配置
spring:
task:
execution:
pool.core-size: 10 # 核心线程数,默认为8
queue-capacity: 10 # 队列容量,默认为无限大
max-size: 10 # 最大线程数,默认为无限大
然后在启动类上加上注解@EnableAsync,使用的方法上加上@Async
也可以通过异步配置,重写AsyncConfigurer里的getAsyncExecutor()方法,配置文件上加上注解@EnableAsync
/**
* 异步 多线程配置
*/
@Configuration
@EnableAsync
public class AsyncConfiguration implements AsyncConfigurer {
核心线程数量
@Value("${my-thread-pool.core-pool-size:10}")
private Integer corePoolSize;
最大线程数量
@Value("${my-thread-pool.max-pool-size:100}")
private Integer maxPoolSize;
最大线程池缓存队列数量
@Value("${my-thread-pool.queue-capacity:100}")
private Integer queueCapacity;
@Override
public Executor getAsyncExecutor() {
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
executor.setCorePoolSize(corePoolSize);
executor.setMaxPoolSize(maxPoolSize);
executor.setQueueCapacity(queueCapacity);
executor.setThreadNamePrefix("zyw-ExecutorThread-");
executor.initialize();
return executor;
}
@Override
public AsyncUncaughtExceptionHandler getAsyncUncaughtExceptionHandler() {
return new SimpleAsyncUncaughtExceptionHandler();
}
}