spring托管线程池配置
threadPool:
maxPoolSize: 30
keepAliveTime: 60
queueCapacity: 1000
corePoolSize: 10
@Configuration
@EnableAsync
public class ThreadPoolTaskConfig {
@Value("${threadPool.corePoolSize}")
private int corePoolSize;
@Value("${threadPool.maxPoolSize}")
private int maxPoolSize;
@Value("${threadPool.keepAliveTime}")
private int keepAliveTime;
@Value("${threadPool.queueCapacity}")
private int queueCapacity;
private ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
@Bean("taskExecutor")
public ThreadPoolTaskExecutor taskExecutor(){
executor.setCorePoolSize(corePoolSize);
executor.setMaxPoolSize(maxPoolSize);
executor.setQueueCapacity(queueCapacity);
executor.setKeepAliveSeconds(keepAliveTime);
executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
executor.initialize();
return executor;
}
}
使用
@Service
public class ChannelPageServiceImpl implements ChannelPageService {
@Resource
private ChannelPageAsyncService channelPageAsyncService;
@Override
public ChannelPageDTO getChannelPage(Long userId, RequestTerminal terminal) throws Exception {
ChannelPageDTO channelPage = new ChannelPageDTO();
Future<WelfareDTO> welFareFuture1 = channelPageAsyncService.getWelFareVOByType();
Future<WelfareDTO> welFareFuture2 = channelPageAsyncService.getWelFareVOByType();
Future<ArticleDTO> articleFuture = channelPageAsyncService.getArticleVO();
Future<CardDTO> cardDTOFuture = channelPageAsyncService.getCardDTO();
WelfareDTO welfareDTO1 = welFareFuture1.get();
WelfareDTO welfareDTO2 = welFareFuture2.get();
ArticleDTO articleDTO = articleFuture.get();
cardDTO = cardDTOFuture.get();
channelPage.setWelfareDTO1(welfareDTO1);
channelPage.setWelfareDTO2(welfareDTO2);
channelPage.setArticleDTO(articleDTO);
channelPage.setCardDTO(cardDTO);
return channelPage;
}
}
@Async(value = "taskExecutor")
@Slf4j
@Service
public class ChannelPageAsyncServiceImpl implements ChannelPageAsyncService {
@Override
public Future<WelfareDTO> getWelFareVOByType() {
WelfareDTO welfareDTO = new WelfareDTO();
return new AsyncResult<>(welfareDTO);
}
@Override
public Future<ArticleDTO> getArticleVO() {
ArticleDTO articleDTO = new ArticleDTO();
return new AsyncResult<>(articleDTO);
}
}