文章目录
一、需求场景
通常情况,在小项目中,业务单一,单个线程池能很好地满足业务需求,但如果业务种类多呢?单个线程池还能满足么?
从隔离性的角度出发,我们一般希望一块业务由独立的线程池负责处理。因此,对于多业务项目,最合适的选择是引入多线程池。
在 SpringBoot 中,对于单线程池已经实现了很好的集成,但在多线程池上可以参考的资料比较少。对此,本文提出来一种基于 SpringBoot 实现多线程池的方法,希望能对诸君有所帮助。
二、需要的核心注解
在 SpringBoot 中实现线程池,需要以下两个核心注解:
-
@EnableAsync:通过该注解,开启对异步任务的支持
-
@Async:声明当前方法为异步方法
三、自定义线程池配置
在集成线程池之前,我们首先需要实现线程池的自定义配置,保证在项目中各线程池的可配置性。
3.1 所需依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
注:该依赖的作用是实现配置文件到实体类的字段定位,主要用于协助开发人员。没有添加该依赖对程序的运行结果不会产生影响。
3.2 定义基类 AsyncConstants
public class AsyncConstants {
/**
* 核心线程数
*/
private Integer corePoolSize = 8;
/**
* 最大线程数
*/
private Integer maxPoolSize = 16;
/**
* 空闲线程存活时间
*/
private Integer keepAliveSeconds = 60;
/**
* 等待队列长度
*/
private Integer queueCapacity = 100;
public Integer getCorePoolSize() {
return corePoolSize;
}
public void setCorePoolSize(Integer corePoolSize) {
this.corePoolSize = corePoolSize;