配置自定义线程池
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import java.util.concurrent.Executor;
@Configuration
@EnableAsync
public class ThreadPoolConfig {
@Bean("taskExecutor")
public Executor asyncServiceExecutor() {
final int cpuCount = Runtime.getRuntime().availableProcessors();
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
executor.setCorePoolSize(cpuCount);
executor.setMaxPoolSize(cpuCount * 2);
executor.setQueueCapacity(100);
executor.setKeepAliveSeconds(60);
executor.setThreadNamePrefix("myBlog--");
executor.setWaitForTasksToCompleteOnShutdown(true);
executor.initialize();
return executor;
}
}
@Async异步执行方法,使用线程池
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.yyf.blogapi.mapper.ArticleMapper;
import com.yyf.blogapi.po.Article;
import lombok.extern.slf4j.Slf4j;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;
@Slf4j
@Service
public class UpdateViewCountService {
@Async("taskExecutor")
public void updateViewCount(ArticleMapper articleMapper, Article article) {
Article updateViewArticle = new Article();
updateViewArticle.setViewCounts(article.getViewCounts() + 1);
updateViewArticle.setId(article.getId());
articleMapper.updateById(updateViewArticle);
}
}