JAVA關於POI匯出Excel記憶體溢出的解決方案

來源:互聯網
上載者:User

標籤:

JAVA關於POI匯出Excel記憶體溢出的解決方案

在我們使用JAVA開發過程中,經常要匯出查詢獲得的資料,這些資料一般情況下都是以Excel儲存的,因此我們在匯出資料的時候要使用JAVA的POI庫,其主要是對各種windows平台的資料格式進行操作,在這裡,我們是對Excel操作。

產生Excel的過程原理是這樣的,首先,我們對資料庫進行查詢,擷取相應的結果集,一般是list集合,然後產生Workbook對象,根據產生的Workbook對象擷取sheet對象,根據此sheet對象擷取Row對象,再根據Row對象擷取Cell對象,最後設定cell儲存格的值,迴圈產生Row和Cell對象,將list中的值寫入Cell中,寫完後,將Workbook對象寫入相應的流對象即可。

在上述過程中,若list集合的資料不多,不會出現問題,倘若list中的資料足夠多(幾萬條以上),則會導致記憶體溢出,匯出失敗。

其解決方案就是我們分批匯出,每次查詢固定數量的list資料集合,將其中的資料寫入一個Workbook對象中,依次迴圈,直至將所有的資料寫如Workbook中,此解決方案會產生多個Workbook對象,在供瀏覽器下載的時候也會有問題,因此,我們還要對產生的多個Excel檔案進行打包壓縮,即叫用作業系統的tar命令(一般來說應用都部署在linux環境下)產生一個壓縮包,下載此壓縮包即可。

註:在講Workbook對象寫入OutputStream流中,在構建OutputStream時其路徑不能是web容器中的路徑,否則永遠只能產生一個Workbook對象,原因不明

JAVA關於POI匯出Excel記憶體溢出的解決方案

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.