Spring Batch 2.0的新特性
這一版本的新特性可以分為四類:對Java 5的支持、非順序執(zhí)行、增強的可伸縮性以及注解。
對Java 5的支持:
Spring Batch 2.0版支持Java 5泛型和參數(shù)化類型,以便可以在編譯時檢查類型安全性。例如,ItemReader接口現(xiàn)在有了一個類型安全的read方法。
非順序執(zhí)行:
這其實包括3個新特性——條件、暫停和并行執(zhí)行。憑借這些特性,各步驟可以按非線性順序執(zhí)行。即使工作(Job)中的某個步驟(step)失敗,整個工作也依然能夠完成。有條件執(zhí)行(Conditional execution)根據(jù)***一個ExitStatus把工作劃分為不同的分支。這也包括FAILED狀態(tài)下執(zhí)行分支任務的能力,也就是說一個步驟的失敗不再是整個工作的致命錯誤。暫停執(zhí)行(Pause execution)可以用來停止或等待外部命令(explicit instruction),這在業(yè)務規(guī)則需要人工干預以檢查業(yè)務關鍵數(shù)據(jù)是否有效時非常有用。而對于多步驟的并行執(zhí)行(parallel execution),各步驟間互相獨立,用戶可以自行指定哪些分支能夠并行執(zhí)行。
可伸縮性:
新版采用兩種方法支持多進程的并行執(zhí)行:遠程分割及劃分。遠程分割是在對數(shù)據(jù)結構沒有任何詳盡認知的情況下對一個步驟的特定工作進行劃分的一項技術。任何輸入源都可以動態(tài)分割,只需要通過單一進程讀取該輸入源,并將其作為一整塊發(fā)送給遠程工作進程即可。遠程工作進程實現(xiàn)了listener模式,對請求作出響應,處理數(shù)據(jù)且異步發(fā)回應答。請求和應答的傳輸必須是持久性的、有保證的,且只有單一的消費者,這些特性在所有JMS實現(xiàn)中都已具備。Spring Batch正是在Spring Integration基礎上構建的遠程分割特性,因此它根本不必關心消息中間件的實際實現(xiàn)。
劃分是實現(xiàn)可伸縮性的另一種方式,相比之下,它需要知道輸入數(shù)據(jù)的結構,比如主鍵的范圍、或者要處理文件的名字。這種模式的好處是,分區(qū)中的每個元素的處理器都可以看作是正常Spring Batch工作中的單個步驟。它們不用實現(xiàn)任何特定模式,因而易于配置和測試。劃分比遠程分割更具伸縮性,這是因為在同一地方讀取所有輸入數(shù)據(jù)時不會產(chǎn)生序列化瓶頸。在Spring Batch 2.0 中,劃分由兩個接口支持:PartitionHandler 和StepExecutionSplitter。
基于注解的配置:
Spring Batch組件如reader、writer、processor、listener,都可以使用注解來配置,也都可以插入到任務的某個步驟中去。這是通過針對Spring Batch的XML命名空間來實現(xiàn)的。
新版本在應用程序監(jiān)測方面也有一些變化,包括對執(zhí)行或跳過項目的計數(shù)、記賬;在每個階段對所有項目讀取、處理和寫入的分割計數(shù)等方面的統(tǒng)計。對于那些沒有把執(zhí)行劃分成讀取、處理、寫入等各個步驟(或tasklet)的應用來說,這些統(tǒng)計更多的是為了綜合了解而絕非必需,但多數(shù)情況下,這總比只存儲項目總數(shù)更可取。
SpringSource計劃在企業(yè)級Batch產(chǎn)品中提供劃分和遠程分割、還有管理和調度等方面的完整的運行時解決方案。其未來的路線圖還包括為 Spring Batch 2.1增加Spring 3.0依賴(同時保留2.5.6為可選)。正是出于這樣的計劃,新版本中涵蓋的特性以工作和步驟的配置居多,尤其是在配置過程中使用了Spring Expression Language (EL)的延遲綁定(late binding),該延遲綁定的語法和Spring Batch 2.0中的基本相同,只是所提供的特性更多、靈活性更大。
【編輯推薦】