728x90
POI SAX 보다 더 간단하게 메모리 이슈를 해결할수있는 방법
* 아래의 monitorjbl api를 사용하면 엑셀 대용량 문제가 간단하게 해결된다.
POI SAX XSSFReader 대용량 엑셀 파일 읽기 OOME(Out of Memory Error) 방지
* 일단 시작 전에 대용량 테스트를 위한 eclipse Heap 영역 늘리기eclipse .ini 파일을 열기 Xms (시작크기) / Xmx (최대크기) 수정하기 참고로 Xmx 최대크기는 자기의 pc ram 사양을 확인하고 바꾸기 추천
truecode-95.tistory.com
1. poi버전에 맞는 monitorjbl .jar를 다운받기.
Download xlsx-streamer.jar - @com.monitorjbl
Download: xlsx-streamer.jar (com.monitorjbl) - Streaming Excel reader JAR file - Latest & All Versions
mavenlibs.com
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.13</version> <!-- 최신 버전 확인 필요 -->
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.13</version> <!-- 최신 버전 확인 필요 -->
</dependency>
<!-- https://mvnrepository.com/artifact/com.monitorjbl/xlsx-streamer -->
<dependency>
<groupId>com.monitorjbl</groupId>
<artifactId>xlsx-streamer</artifactId>
<version>1.0.0</version>
</dependency>
2. monitorjbl api github 소스 확인
monitorjbl
monitorjbl.github.io
@ResponseBody
@RequestMapping(value = "/excelUploadServlet.do", method = RequestMethod.POST)
public void excelUploadServlet(MultipartHttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
try {
MultipartFile filePart = request.getFile("excelFile");
try (InputStream is = filePart.getInputStream()) {
Workbook workbook = (Workbook) StreamingReader.builder()
.rowCacheSize(100) // 메모리에 보관할 행의 수를 설정
.bufferSize(4096) // InputStream을 파일로 읽을 때 사용할 버퍼 크기를 설정
.open(is); // InputStream으로부터 StreamingReader 초기화
for (int s = 0; s < workbook.getNumberOfSheets(); s++) {
Sheet sheet = workbook.getSheetAt(s);
for (Row row : sheet) {
for (Cell cell : row) {
} // 로직 추가
}
}
} catch (Exception e) {
e.printStackTrace();
}
} catch (Exception e) {
e.printStackTrace();
}
}
apache poi 메모리 이슈해결
apache poi(XSSFWorkbook API) 가 갖고 있는 메모리 이슈로 인해 full gc가 지속적으로 발생할 수 있다이를 근본적으로 해결하기 위해서는 read 시에 메모리 사용 증대가 발생되지 않도록 개선된 무언가가
iamreo.tistory.com
'Spring' 카테고리의 다른 글
| POI SAX XSSFReader 대용량 엑셀 파일 읽기 OOME(Out of Memory Error) 방지 (0) | 2024.05.23 |
|---|---|
| [SUMMERNOTE] 썸머노트 이미지 다중 업로드 처리 (글 저장 클릭 시 임시폴더에 있던 파일 복사하여 외부 폴더에..) (2) | 2022.02.24 |
| @RequestParam 값이 Null / 예외 처리 (required=false) (0) | 2022.02.16 |
| [Spring] WebSocket sockJS 실시간 알림 구현하기 (3) (1) | 2022.01.10 |
| [Spring] 파일 다운로드 구현 (0) | 2021.12.15 |