Skip to content
This repository was archived by the owner on Sep 4, 2025. It is now read-only.

使用模板填充,有20个sheet,在某个几万条的sheet处oom,并且服务重启第一次跑正常,多导几次oom #4118

@yubuliuke-yangss

Description

@yubuliuke-yangss

建议先去看文档

快速开始常见问题

异常代码

  ByteArrayOutputStream outputStream = new ByteArrayOutputStream();

        try (ExcelWriter excelWriter = EasyExcel.write(outputStream).withTemplate(this.adjustTempByEasyExcel(organizationId,scanId,lang)).build()) {
            FillConfig fillConfig = FillConfig.builder().forceNewRow(Boolean.TRUE).build();
            //-------------------------第一个sheet页(封面)-----------------------------
            Map<String, Object> coverParam = this.getPrompt(lang, "xhiker.analyseReport");
            Object coverSheetName = coverParam.get("xhiker_analyseReport_cover_cover");
            WriteSheet coverSheet = EasyExcel.writerSheet(0).registerWriteHandler(new CustomTemplateSheetStrategyHandler(0, String.valueOf(coverSheetName))).build();
            ScanInfoQueryVO scanInfo = scanInfoRepository.selectScanInfoDetail(scanId);
            coverParam.put("projectNumber", scanInfo.getProjectCode());
            coverParam.put("projectName", scanInfo.getProjectName());
            coverParam.put("projectVersion", scanInfo.getProjectVersion());
            coverParam.put("sapVersionName", scanInfo.getTargetVersionName());
            coverParam.put("reportDate", new Date());
            excelWriter.fill(coverParam, coverSheet);
            Map<String, Object> systemBackgroundParam = this.getPrompt(lang, "xhiker.systemBackground");
            if (this.isAdministratorRole()) {
                this.uewSheet(organizationId, scanId, lang, excelWriter, fillConfig, systemBackgroundParam);
                this.customizedDevelopmentSheet(organizationId, scanId, lang, excelWriter, fillConfig);
            } else {
                if (Constants.ScanStatus.COMPLETE.equals(scanInfo.getUewStatusCode())) {
                    this.uewSheet(organizationId, scanId, lang, excelWriter, fillConfig, systemBackgroundParam);
                }
                if (Constants.ScanStatus.COMPLETE.equals(scanInfo.getCsaStatusCode())) {
                    this.customizedDevelopmentSheet(organizationId, scanId, lang, excelWriter, fillConfig);
                }
            }
            excelWriter.finish();
            outputStream.close();
            return outputStream;
        } catch (IOException e) {
            log.error("Error creating temporary file", e);
            throw new CommonException("Failed to create temporary file");
        }
    }
 private void uewSheet(Long organizationId, Long scanId, String lang, ExcelWriter excelWriter, FillConfig fillConfig, Map<String, Object> systemBackgroundParam) throws IOException {
       
        //客制程序
        this.scanCpSheet(organizationId, scanId, lang, excelWriter, fillConfig);
        、、、
    }
 public void scanCpSheet(Long tenantId, Long scanId, String lang, ExcelWriter excelWriter, FillConfig fillConfig){
       
        //分页写入
        int pageSize = 1500; // 每批处理量
        int pageNum = 0;
        PageRequest pageRequest = new PageRequest();
        pageRequest.setSize(pageSize);
        pageRequest.setPage(pageNum);
        List<ScanCpDetail> batchList;
        do {
            batchList = scanCpDetailService.viewQuery(tenantId, pageRequest, scanCpDetail);
            excelWriter.fill(new FillWrapper("data1", batchList), fillConfig, scanCpSheet);
            pageNum++;
            pageRequest.setPage(pageNum);
        } while (!batchList.isEmpty());
    }

异常提示

大家尽量把问题一次性描述清楚,然后贴上全部异常,这样方便把问题一次性解决掉。
至少大家要符合一个原则就是,能让其他人复现出这个问题,如果无法复现,肯定无法解决。

问题描述

Metadata

Metadata

Assignees

No one assigned

    Labels

    help wantedExtra attention is needed

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions