写了一个导出的功能,但是在生产上遇到大数据会超时,需要看一下各部分用时。以前可能会用System.currentTimeMillis()做end-begin,现在有StopWatch,更加方便
介绍一下StopWatch的使用
上代码
public String exportUsedGlxCoupon(@RequestBody(required = false) StaffSendCouponStatisticVo statisticVo) {
String fileName = "exportUsedCoupon.xlsx";
ExportParams params = new ExportParams("优惠券使用明细", "使用明细");
StopWatch sw = new StopWatch("导出excel,各功能耗时");
sw.start("newOrderMapper.exportUsedGlxCoupon");
List<ExportCouponUsedDto> couponList = newOrderMapper.exportUsedCoupon(statisticVo);
sw.stop();
sw.start("ExcelExportUtil.exportBigExcel");
Workbook workbook = ExcelExportUtil.exportBigExcel(params, ExportCouponUsedDto.class, couponList);
sw.stop();
ExcelExportUtil.closeExportBigExcel();
String file = fileName.split("\\.")[0];
log.info("生成excel...");
response.reset();
response.setContentType("application/octet-stream; charset=utf-8");
response.setHeader("Content-Disposition", "attachment; filename="+file+"(" + LocalDateTime.now().toString() + ").xlsx");
sw.start("workbook.write(fos)");
try (OutputStream os = response.getOutputStream();) {
log.info("关闭流...");
workbook.write(os);
os.flush();
} catch (IOException e) {
e.printStackTrace();
}
sw.stop();
log.info(sw.prettyPrint());
return fileName;
}
日志输出:
StopWatch '导出excel,各功能耗时': running time (millis) = 2809
-----------------------------------------
ms % Task name
-----------------------------------------
00277 010% newOrderMapper.exportUsedGlxCoupon
02297 082% ExcelExportUtil.exportBigExcel
00235 008% workbook.write(fos)