web developer๐Ÿ‘ฉ๐Ÿป‍๐Ÿ’ป

POI monitorjbl xlsx-streamer ๋ฉ”๋ชจ๋ฆฌ ์ด์Šˆ ํ•ด๊ฒฐ ๋ณธ๋ฌธ

Spring

POI monitorjbl xlsx-streamer ๋ฉ”๋ชจ๋ฆฌ ์ด์Šˆ ํ•ด๊ฒฐ

natrue 2024. 6. 7. 17:50
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