需求
在执行的时候需要同步用户信息,修改用户状态,同步信息的时候需要查询用户之前的记录并同步到ES中
问题
1、在报名的时候发现因为用户之前的记录比较多,会执行的比较慢,这样会一直报名中
2、用户在多次点击或者网络环境不好的情况下多次请求导致重复计算
解决
除了主线报名之外其他的计算、同步过程都异步执行,或者使用定时任务定时扫描
1、定时任务定时扫描,需要将信息压入队列,然后定期执行,消耗队列使用线程池
技术点
使用线程池执行队列:springboot线程池执行类ThreadPoolExecutor
在springboot文档中指出,没有配置线程池的话,springboot会自动配置一个ThreadPoolExecutor到Bean中
1、首先引入线程池配置类
先上代码:
package com.lz.common.config.thread;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
/**
* @description: 线程池配置 多个默认配置:当配置文件不存在的时候使用默认值
* @author: jusz
* @create: 2021/12/14 21:53
*/
@Component
@ConfigurationProperties("threadpool")
@Data
public class ThreadPoolProperties {
/**
* 线程池实例1 :当有其他配置的时候新new一个配置设置默认参数
*/
private ThreadPoolInstance poolInstance = new ThreadPoolInstance(){
{
this.setCorePoolSize(5);
this.setMaxNumPoolSize(5);
this.setKeepAliveSeconds(60);
this.setWorkQueueCapacit