From ebebd3eaa482f19c43fef45f9458d88ee16bd9a4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Johnny=20Miller=20=28=E9=94=BA=E4=BF=8A=29?= Date: Mon, 1 Mar 2021 09:14:49 +0800 Subject: [PATCH] perf($POI): close workbook when destroying locale context --- .../AbstractExcelImportController.java | 27 ++++++++++++++++--- 1 file changed, 23 insertions(+), 4 deletions(-) diff --git a/spring-cloud-starter/src/main/java/com/jmsoftware/maf/springcloudstarter/controller/AbstractExcelImportController.java b/spring-cloud-starter/src/main/java/com/jmsoftware/maf/springcloudstarter/controller/AbstractExcelImportController.java index eafef244..9cf13ed3 100644 --- a/spring-cloud-starter/src/main/java/com/jmsoftware/maf/springcloudstarter/controller/AbstractExcelImportController.java +++ b/spring-cloud-starter/src/main/java/com/jmsoftware/maf/springcloudstarter/controller/AbstractExcelImportController.java @@ -24,6 +24,7 @@ import org.springframework.web.multipart.MultipartHttpServletRequest; import javax.servlet.http.HttpServletRequest; +import java.io.BufferedInputStream; import java.io.File; import java.io.FileInputStream; import java.io.IOException; @@ -268,13 +269,31 @@ private void destroyLocaleContext() { sheetLocation.remove(); readingRowCount.remove(); userDefinedMessage.remove(); + closeWorkbook(workbook.get()); workbook.remove(); + closeWorkbook(workbookWithErrorMessage.get()); workbookWithErrorMessage.remove(); excelFilePath.remove(); exceptionOccurred.remove(); file.remove(); } + /** + * Close workbook. + * + * @param workbook the workbook + */ + private void closeWorkbook(Workbook workbook) { + if (workbook != null) { + try { + workbook.close(); + } catch (IOException e) { + log.error("Exception occurred when closing workbook! Exception message: {}, workbook: {}", + e.getMessage(), workbook); + } + } + } + /** * Upload excel file. Any exceptions happened in any lifecycle will not interrupt the whole process. * @@ -577,13 +596,13 @@ public static void main(String[] args) { private Workbook readFile(@NonNull File file) throws IOException { Workbook workbook = null; val extension = FilenameUtils.getExtension(file.getName()); + val bufferedInputStream = new BufferedInputStream(new FileInputStream(file)); if (XLS.equals(extension)) { - FileInputStream fileInputStream = new FileInputStream(file); - POIFSFileSystem poifsFileSystem = new POIFSFileSystem(fileInputStream); + POIFSFileSystem poifsFileSystem = new POIFSFileSystem(bufferedInputStream); workbook = new HSSFWorkbook(poifsFileSystem); - fileInputStream.close(); + bufferedInputStream.close(); } else if (XLSX.equals(extension)) { - workbook = new XSSFWorkbook(new FileInputStream(file)); + workbook = new XSSFWorkbook(bufferedInputStream); } return workbook; }