先看看我的表吧
第一步: 搞个配置类
@Configuration
// 开启线程
@EnableAsync
public class ThreadPoolConfig {
@Bean("taskExecutor") //注入spring ...
public Executor asyncServiceExecutor(){
//创建对象
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
//设置核心线程数
executor.setCorePoolSize(5);
//设置最大线程数
executor.setMaxPoolSize(20);
//设置队列大小
executor.setQueueCapacity(Integer.MAX_VALUE);
//设置线程活跃时间
executor.setKeepAliveSeconds(60);
//设置线程默认名称
executor.setThreadNamePrefix("miniipo");
//等到所有任务结束后关闭线程池
executor.setWaitForTasksToCompleteOnShutdown(true);
executor.initialize();
return executor;
}
}
第二部:搞个service
@Component
public class ThreadService {
//参数跟下面的结合我的数据库看
@Async("taskExecutor") //注意这个注解
public void updateViewCount(NewsMapper newsMapper, News news){
News newsUpdate = new News();
newsUpdate.setViewCounts(news.getViewCounts() + 1);
LambdaQueryWrapper<News> newsLambdaQueryWrapper = new LambdaQueryWrapper<>();
newsLambdaQueryWrapper.eq(News::getId,news.getId());
newsLambdaQueryWrapper.eq(News::getViewCounts,news.getViewCounts());
newsMapper.update(newsUpdate,newsLambdaQueryWrapper);
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
第三部:直接调用
@Override
public ResponseResult info(Long id) { // ResponseResult 这个是统一返回对象
if (id == null){
return ResponseResult.errorResult(AppHttpCodeEnum.PARAM_REQUIRE);
}
News byId = this.getById(id);
threadService.updateViewCount(newsMapper,byId); //这行是调用
if (StringUtils.isEmpty(id)){
return ResponseResult.errorResult(AppHttpCodeEnum.DATA_NOT_EXIST);
}
return ResponseResult.okResult(byId);
}