2011-12-13 142 views
0

我有以下用例:我需要處理大量文件。每個處理看起來或多或少像這樣:在Spring批處理中順序處理多個文件

1)讀文件

2)執行操作(a)在該內容

3)執行操作(b)上的內容

4 )對內容執行操作(c)中

... 

n)的刪除文件

Spring批處理看起來像是一個很好的解決方案,但有一個例外:我不想在步驟1)中讀取所有文件,將所有文件都傳遞給步驟2)等,因爲它會佔用大量內存。

編輯:我提交我的文件到內存(而不是數據庫)。這就是爲什麼我更喜歡逐個或分批處理文件的原因。我的意思是:在單個文件/批處理中運行所有步驟(文件/批處理在最後一步被刪除,內存得到清理),然後繼續下一個文件/批處理等等。

Spring Batch是否有支持多次執行所有步驟的機制? 或者我應該多次運行相同的工作,直到我用完文件?

感謝和問候, 彼得

回答

1

對於N個文件的簡單情況,您需要執行N個作業,每個作業都會傳遞一個文件名JobParameter。您的每個處理步驟都不能用Spring Batch表示,但您可以使用CompositeItemProcessor來鏈接處理器。

+0

對不起,這個問題有點過時了,但是你在這裏寫的正是我最終做的:)謝謝 – machinery

2

在Spring Batch的文件,這是multi-file input

它與一個步下處理,這是什麼會做的是:

  • 創建的文件列表地址
  • 打開第一個文件,讀取/處理結束,關閉文件
  • 打開下一個...等等
+0

嗯...謝謝,這會在一些情況下幫助我一點點,但如果我需要運行多個步驟,這將導致我一次加載所有文件,對吧? 這是我想避免的,而不是混亂我的記憶。 但是,謝謝你的提示:) – machinery

+0

沒有文件順序處理,單個文件不完全在內存中,實現使用標準的Java機制與文件(指針)和緩衝流,所以只有讀取項目*提交率是保存在內存中(例如,提交率1000,意味着1000條讀取行,轉換爲條目) –

+0

哦,對不起,我似乎沒有完全解釋我的情況。我將讀取的文件內容提交到內存中。這就是爲什麼我更願意在單個文件上執行所有步驟,然後在下一個文件上執行所有步驟等等(因爲在最後一步中我刪除了該文件)。 – machinery

相關問題