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