背景:线上报表导出 跑了没1分钟堆内存溢出,emmm
需求分析
1、数据存储在es,都是单表 涉及表a,b,c,d,e,f 6张表
2、每张表数据在百万以上,每个表取几个字段 拼接成一张大报表
3、6张表之间对应关系,可能 1条a数据 几千条b数据
痛点
1、springboot 服务内存 256, new 对象太快 太多 没有足够的空间挪动回收
解决:
1、利用线程池+redis 异步执行、
poolTaskExecutor.execute(new Runnable() {
@Override
public void run() {
try{
//redis 加锁
redisCommonService.set(redisKey,CommonConst.IS_NO);
log.info("子线程执行完毕。。。");
}catch (Exception e){
log.error("生成报表数据异常",e);
}finally {
//释放锁
redisCommonService.set(redisKey,CommonConst.IS_YES,600