package com.clx.elasticsearchdemo.config;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.AsyncConfigurer;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import java.util.concurrent.Executor;
/**
* @author clx
* 多线程配置类
* Configuration :定义为配置类
* EnableAsync :开启注解异步任务支持
*/
@Configuration
@EnableAsync
public class TaskExecutorConfig implements AsyncConfigurer {
/**
* 自定义线程池 重写getAsyncExecutor()
* 最好是根据自己服务器性能定义
*/
@Override
public Executor getAsyncExecutor() {
ThreadPoolTaskExecutor threadPoolTaskExecutor = new ThreadPoolTaskExecutor();
threadPoolTaskExecutor.setCorePoolSize(5);
threadPoolTaskExecutor.setMaxPoolSize(10);
threadPoolTaskExecutor.setQueueCapacity(25);
threadPoolTaskExecutor.initialize();
return threadPoolTaskExecutor;
}
}
使用直接注入@Async 即可使用异步自定义线程池
//使用异步自定义线程池
@Async
@Override
public Boolean saveEsFromJD(String keyword) throws Exception {
//爬取数据
List<Content> list = htmlParseUtil.parseUrl(null, keyword);
//批量存储es
BulkRequest bulkRequest = new BulkRequest();
//设置超时时间
bulkRequest.timeout("2m");
for (Content content : list) {
bulkRequest.add(new IndexRequest("jd_goods").source(JSON.toJSONString(content), XContentType.JSON));
}
BulkResponse bulk = restHighLevelClient.bulk(bulkRequest, RequestOptions.DEFAULT);
return !bulk.hasFailures();
}
好了,这样你即可在项目中使用了. 相信你已经会如何自定义线程池了.祝您顺利.
如有帮助请吝啬给个赞👍