在多个api请求上旧请求处理停止

amrnrhlw  于 2021-07-03  发布在  Java
关注(0)|答案(0)|浏览(239)

我已经在核心java中创建了restapi。这个api处理大量数据,然后返回excel文件。现在我面临的问题是,当我从 Postman 发送一个请求时,excel包含完整的数据。但是当我点击多个请求时,比如3个使用postman的请求,前两个请求中的excel包含不完整的数据(只有40-60条记录,而不是100条),但是最后一个请求excel再次包含完整的数据。似乎每当我收到新的请求时,对旧请求的处理就停止了。
api代码

@Path("dynamictest")
    @POST
    @Produces(XLSX)
    public Object getDynamicExcelReports(ReportParams params)
            throws SQLException, IOException, IllegalAccessException, NoSuchFieldException {
        params.setUserId(getUserId());
        if (params.getMail()) {
            new Thread(() -> {
                try {
                    MimeBodyPart attachment = new MimeBodyPart();

                    attachment.setFileName("report.xlsx");
                    attachment.setDataHandler(new DataHandler(new ByteArrayDataSource(
                            Dynamic.getDynamicExcelReporttest(params).toByteArray(), "application/octet-stream")));

                    Context.getMailManager().sendMessage(
                            params.getUserId(), "Report", "The report is in the attachment.", attachment, User.class, null);
                } catch (Exception e) {
                    LOGGER.warn("Report failed", e);
                }
            }).start();
            return Response.noContent().build();
        } else {
            return Response.ok(Dynamic.getDynamicExcelReporttest(params).toByteArray())
                    .header(HttpHeaders.CONTENT_DISPOSITION, CONTENT_DISPOSITION_VALUE_XLSX).build();
        }
    }

excel写函数

public static ByteArrayOutputStream processExcelV2test(Collection<DynamicReport> reports, ReportParams params, RpTmplWrapper rpTmplWrapper,
            Date from, Date to, boolean isDriverReport) throws IOException, IllegalAccessException, NoSuchFieldException, SQLException {
        XSSFWorkbook workbook = new XSSFWorkbook();
        List<RpTmplTblWrapper> tblListWrapper = new ArrayList(rpTmplWrapper.getRpTmplTblWrappers());
        tblListWrapper.sort(Comparator.comparing(tblWrapper -> tblWrapper.getRpTmplTbl().getPosition()));
        tblListWrapper.forEach((tblWrapper) -> {  //loop for multiple sheets
            try {
                String sheetName = tblWrapper.getRpTmplTbl().getLabel().replaceAll("[^A-Za-z0-9]", "|");
                Sheet sheet = workbook.createSheet(sheetName);

                /**setting data in rows and columns**/

            } catch (Exception ex) {}
        });

        Logger.getLogger(DynamicExcelUtils.class.getName()).log(Level.WARNING, "workbook completed");
        ByteArrayOutputStream stream = new ByteArrayOutputStream();
        workbook.write(stream);
        workbook.close();
        return stream;
    }

任何帮助或建议都会有帮助的,谢谢

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题