Java 在多个api请求上,旧请求处理停止
我已经在核心java中创建了RESTAPI。 此api处理大量数据,然后返回excel文件。 现在我面临的问题是,当我从邮递员那里发送一个请求时,excel包含完整的数据。但当我使用postman点击多个请求(如3个请求)时,前两个请求中的excel包含不完整的数据(只有40-60条记录,而不是100条),但对于最后一个请求,excel再次包含完整的数据。 似乎每当我收到新的请求时,都会停止对旧站点的处理 api代码Java 在多个api请求上,旧请求处理停止,java,excel,apache-poi,restapi,Java,Excel,Apache Poi,Restapi,我已经在核心java中创建了RESTAPI。 此api处理大量数据,然后返回excel文件。 现在我面临的问题是,当我从邮递员那里发送一个请求时,excel包含完整的数据。但当我使用postman点击多个请求(如3个请求)时,前两个请求中的excel包含不完整的数据(只有40-60条记录,而不是100条),但对于最后一个请求,excel再次包含完整的数据。 似乎每当我收到新的请求时,都会停止对旧站点的处理 api代码 @Path("dynamictest")
@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;
}
public static ByteArrayOutputStream processExcelV2test(收集报告、报告参数、RpTmplWrapper、,
Date from、Date to、boolean isDriverReport)引发IOException、IllegaAccessException、NoSuchFieldException、SQLException{
XSSFWorkbook工作簿=新XSSFWorkbook();
List tblListWrapper=newarraylist(rpTmplWrapper.getRpTmplTblWrappers());
排序(Comparator.comparing(tblWrapper->tblWrapper.getrptmptbltbl().getPosition());
tblListWrapper.forEach((tblWrapper)->{//多页循环
试一试{
String sheetName=tblWrapper.getRpTmplTbl().getLabel().replaceAll(“[^A-Za-z0-9]”,“|”);
工作表=工作簿.createSheet(工作表名称);
/**设置行和列中的数据**/
}捕获(例外情况除外){}
});
Logger.getLogger(dynamicexclustils.class.getName()).log(Level.WARNING,“工作簿已完成”);
ByteArrayOutputStream=新建ByteArrayOutputStream();
工作簿。写(流);
workbook.close();
回流;
}
任何帮助或建议都会有帮助
谢谢这些请求是否提供相同的参数?我感兴趣的是提供负责<代码> GETMAIL()/Cuff>函数的PARAM以响应<代码> true。是的,与完全相同的PARAMS并考虑<代码> GETMAIL()= false < /代码>,因此Excel发送的响应不在EMAIL中,即使<代码> GETMAIL()。=true对于多个调用,早期请求excel中的不完整数据和最后一个请求完整数据的行为保持不变您是否尝试过调试它?是的,使用调试日志,因为多个请求在同一时间出现问题,单个请求可以正常工作,调试没有得到任何帮助。这些请求提供相同的参数吗?我感兴趣的是提供负责<代码> GETMAIL()/Cuff>函数的PARAM以响应<代码> true。是的,与完全相同的PARAMS并考虑<代码> GETMAIL()= false < /代码>,因此Excel发送的响应不在EMAIL中,即使<代码> GETMAIL()。=true对于多个调用,早期请求excel中的不完整数据和最后一个请求完整数据的行为保持不变。您是否尝试调试它?是的,使用调试日志,因为多个请求在同一时间出现问题,单个请求可以正常工作,调试没有任何帮助。