我幾乎用Spring Batch完成了我的工作,它正在工作,但後來遇到了問題來處理錯誤。我將做一個簡單的例子:使用Spring批處理錯誤和控制中斷
我看了一個平面文件,我(後來)地圖3個變量:
ID CODE NAME
AAA3333333Alex
AAA3333333Mark
BBB4444444Paul
我希望讀者閱讀與控制斷裂平面文件(我不知道這是否是英文的正確名詞,意大利語中的「key break」就是這樣):我讀了具有相同ID和CODE的元素,並且只有當鍵更改纔將它們返回給讀者時:
while ((line = (Person) peek()) != null) { //while there are elements to read
if (line.getId().equals(prevElement.getId()) && line.getCode().equals(prevElement.getCode())
//do something
}
這工作正常:當ID或CODE更改時,我將元素返回給作者。 爲了完成這項工作,我必須將應用程序上下文中的commit-interval設置爲1。事情是,在最壞的情況下,如果每條線的元素不同,我承諾每一個元素,它變得非常慢。
所以我說:讓我們把外部控制。不是每次都返回元素作家關鍵的變化,我把它們放在一個列表,然後我返回列表中每200點主要變化(如...手工提交間隔):
while (controlBreakCount < 200 &&) {
while (!exit && (line = (Person) peek()) != null) { //while there are elements to read
if (line.getId().equals(prevElement.getId()) && line.getCode().equals(prevElement.getCode())
//do something
else { //if the key changes
//there is a controlBreakCount++; to increase the count
//add the elements to a list
}
}
}
return the list
並且這也起作用(真正的代碼有更多的控制,但這是以一種簡單的方式解釋)。 問題出現在這裏:在這種情況下如何處理監聽器的錯誤。在我放置外部(帶有controlBreakCount的那個)的情況下,如果200個元素中的一個出現錯誤,則列表中的所有元素都將轉到該偵聽器,因此很難識別出具有該錯誤的元素。
我想我的解決方案不是處理「控制中斷」的最佳方法,但我無法找到真正的太多(我不是很擅長Spring批處理)......可能我有一些幫幫我?
非常感謝你:)
是的,你理解正確,問題是我傳給作者的結構(不正確)。現在按照你的建議,返回的對象更加「可以理解」,並且commit-interval以正確的方式工作:)非常感謝你的幫助!!!!!祝你今天愉快 :) – Pipkin