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