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