营业执照公示网,seo外链平台热狗,网站页面改版降权,项目管理软件开发工具问题情境#xff1a;
项目中存在web页面点击一键导出#xff0c;导出所有数据对应的pdf文件#xff0c;由于有些pdf文件是实时生成的#xff0c;之前最简答的写法for循环处理速度太慢#xff0c;超过了nginx配置的最大响应时间了#xff0c;且对用户交互体验上很不友好
项目中存在web页面点击一键导出导出所有数据对应的pdf文件由于有些pdf文件是实时生成的之前最简答的写法for循环处理速度太慢超过了nginx配置的最大响应时间了且对用户交互体验上很不友好所以进一步进行优化。
解决方案
1.对大量的数据进行分段处理向上取余 代码示例
public ListListFrApplyGuaranteeInfo segmentList(ListFrApplyGuaranteeInfo list ,int segmentSize) {int limit (list.size() segmentSize - 1) / segmentSize;ListListFrApplyGuaranteeInfo segmentList Stream.iterate(0, n - n 1).limit(limit).parallel().map(a - list.stream().skip(a * segmentSize).limit(segmentSize).parallel().collect(Collectors.toList())).collect(Collectors.toList());return segmentList;}2.通过threadPoolTaskExcetor.submit()方法进行多线程任务处理 示例代码 第一步分段处理后的list
lists.forEach({list-{threadPoolExecutor.submit(new xxxxTask());
})第二步具体的task需要实现callalbe 示例代码如下
Slf4j
public class DownloadLetterZipTask implements Callable {// 需要预审的记录 private ListFrApplyGuaranteeInfo dataList;private ZipOutputStream zipOutputStream;private CountDownLatch countDownLatch;private IFrApplyGuaranteeInfoService applyGuaranteeInfoService;public DownloadLetterZipTask(ListFrApplyGuaranteeInfo dataList, ZipOutputStream zipOutputStream, CountDownLatch countDownLatch, IFrApplyGuaranteeInfoService applyGuaranteeInfoService){ this.dataList dataList;this.zipOutputStream zipOutputStream; this.countDownLatch countDownLatch; this.applyGuaranteeInfoService applyGuaranteeInfoService; }Overridepublic Object call() throws Exception {log.info(start-------------- Thread.currentThread().getName()); try { for (FrApplyGuaranteeInfo applyGuaranteeInfo : dataList) {if (!StringUtils.isEmpty(applyGuaranteeInfo.getAcceptNo())) {try {// 这一步为具体的将文件转为字节数组输出流ByteArrayOutputStream waterOutputStream applyGuaranteeInfoService.getLetterPdfByteStream(applyGuaranteeInfo.getAcceptNo());byte[] xmpMetadata waterOutputStream.toByteArray();synchronized (zipOutputStream) {zipOutputStream.putNextEntry(new ZipEntry(applyGuaranteeInfo.getGenerateeLetterNo() .pdf));zipOutputStream.write(xmpMetadata);zipOutputStream.closeEntry();}} catch (Exception e) {log.error([一键导出]---acceptNo为{}生成pdf失败, applyGuaranteeInfo.getAcceptNo());}}}} catch (Exception e) {e.printStackTrace();log.error([xxxx]-批量下载zip失败);} finally {countDownLatch.countDown();}return null;}}