Springboot如何使用多线程处理异步任务,并且是代返回值的。比如,我一个Controller层的接口,调用到Service层,在对应的Service方法中有三个方法,这三个方法都是去调Dao层查询数据库数据,每个查询平均耗时5s,最后将这三个查询的结果进行合并计算。如果不采用异步查询的至少需要15s的时间来处理这个请求。此时我们可以使用异步任务方式来操作,可以减少10s左右的时间。
在Springboot中使用异步需要开启异步支持(@EnableAsync),代码如下
@SpringBootApplication
@EnableAsync
public class PublisherApplication {
public static void main(String[] args) {
SpringApplication.run(PublisherApplication.class, args);
}
}
然后增加一个配置类,不过这个Springboot也会默认配置,一般我们使用线程池是都不使用默认的,而是使用自定义的:
/**
* @author Mr. Zhang
* @description 异步线程池
* @date 2019-04-19 14:21
* @website https://www.zhangguimin.cn
*/
@Configuration
public class AsyncConfig {
private static final int THREADS = Runtime.getRuntime().availableProcessors();
@Bean("taskExecutor")
public Executor execute() {
System.out.println(THREADS);
Executor executor = new ThreadPoolExecutor(THREADS, 2 * THREADS, 5</