2013-07-25 55 views
1

我正在研究使用spring批處理在平面文件和數據庫之間導入和導出數據。我知道我想要做的事情會很容易,但我不能爲了我的生活找出如何去做。我想要做的是從數據庫中讀取數據並寫入壓縮文件。請注意,我不想將所有數據寫入未壓縮文件,然後運行更多步驟來壓縮此文件。我需要將壓縮文件編寫爲進程的唯一輸出。如何在彈簧批次中寫入壓縮文件

在我的腦海裏,我頭腦裏有一個管道圖像,這可能讓我對這樣做的批處理方式感到眩目。我應該創建一個自定義的ZippedFileItemWriter嗎?我如何鏈接FlatFileItemWriter和拉丁版本?有沒有更適合這個的其他機制?

任何指針都會被感激地收到。我有點驚訝,這不是核心框架的一部分;它似乎不是這樣一個瘋狂的想法。也許是這樣,我只是想念它。

問候,

mipper

+0

如果它是基於(文本)行,它可以與http://docs.oracle.com/javase/7/docs/api/java/util/zip/GZIPOutputStream.html或http:///docs.oracle.com/javase/7/docs/api/java/util/zip/ZipOutputStream.html,它的確適用於閱讀,請參閱:http://php.sabscape.com/blog/?p=281 –

+0

@MichaelPralow再一次,我不是在問如何壓縮數據,而是在詢問將這種方法合併到批處理工作流程中的正確/最佳方法。 – user2617724

+1

您需要自定義編寫器,另外您可以打開JIRA票據以使現有的FlatFileItemWriter可擴展(與讀取器相同,爲BufferedWriter提供工廠設置器) –

回答

0

我同意馬蒂亞斯的答案,但我認爲1級的解決方案是不重新啓動。你有一些可重啓性的要求嗎? 看append-to-a-compressed-stream

+0

我沒有複雜的重新啓動要求。如果出於某種原因,進程失敗了(這幾乎只是因爲數據庫已關閉,或者磁盤空間不足,這兩者都不是特別可恢復的),我只是從一開始就重新啓動該進程。事實上,我將不得不從一開始就重新啓動,以便從原始提取過程開始以來收集可能發生在數據庫上的任何更新。 – user2617724

+0

如果是這樣,你只需要一個自定義的'ResourceAwareItemWriterItemStream '實現寫入一個壓縮的OutputStream –