選擇正確的Java批處理實現(xiàn)的10個關(guān)鍵點
您可能已經(jīng)知道,JSR-352是一個Java批處理的標(biāo)準(zhǔn)。該標(biāo)準(zhǔn)在今年發(fā)布,并被包含在了JEE7之中,這意味著,所有的JEE7應(yīng)用服務(wù)器都會有批處理的能力。正如我在上一篇文章中指出,即使您的應(yīng)用服務(wù)器是固定的,但是您依舊可以選擇JSR-352的實現(xiàn)。
既然您可以選擇,那么您應(yīng)該怎么樣選擇呢?當(dāng)然,這和JSR-352提供了什么沒有關(guān)系,因為所有的實現(xiàn)都會有這些功能。你應(yīng)該根據(jù)那些超出標(biāo)準(zhǔn)之外功能來進行選擇。在本文中,基于之前在一些有代表性的公司例如保險公司和銀行,中實現(xiàn)Spring Batch的一些經(jīng)驗,我整理了一些可以作為參考的標(biāo)準(zhǔn)?,F(xiàn)在而言沒有嚴(yán)格的JSR-352實現(xiàn),即使是Spring Batch也還有一段距離,因此現(xiàn)在還沒有直接比較實現(xiàn)方案的可能。但是我們依舊可以看看各個實現(xiàn)在每個參考標(biāo)準(zhǔn)上面的比較(下面的標(biāo)準(zhǔn)按照重要性來排序)。
可測試性
Junit 集成測試在不要部署到應(yīng)用服務(wù)器商應(yīng)該可以跑批處理任務(wù)。開發(fā)的周期性和測試覆蓋的潛力都會提高很多。
組件
一個干凈的批處理模型是很好的,但是為了快速開發(fā)批處理任務(wù)你需要依賴別人寫好的穩(wěn)定的組件。Spring Batch 有很多的這類組件 例如 ItemReaders,ItemWriters,PartitionHandlers 等等對應(yīng)各類數(shù)據(jù)和環(huán)境。
可觀察性
JSR-352 定義了批處理的元數(shù)據(jù)像 JobExecutions,JobInstances,StepExecutions 等等。應(yīng)該有一個簡單的能以圖形化的方式查看這些數(shù)據(jù)或者起/停批處理任務(wù)。Spring Batch 提供了Spring Batch Admin 來實現(xiàn)這個功能。你也可以看看JMX提供的工具。
社區(qū)化
一個友好的開發(fā)者社區(qū)能很大的提高生產(chǎn)能力??纯碐oogle的搜索結(jié)果,一個活躍的論壇和Stackoverflow上的活動來檢查JSR352實現(xiàn)廠商的產(chǎn)品普及度。
任務(wù)繼承
這個參考點看起來不是很重要,但是實際上所有Spring Batch項目都在用。大公司里面都有一些通用規(guī)則,例如協(xié)議監(jiān)聽器,日志初始化,退出代碼轉(zhuǎn)換等等等等。開發(fā)人員不應(yīng)該自己添加適當(dāng)?shù)谋O(jiān)聽器,應(yīng)該從父任務(wù)里簡單的繼承過來。然后在很多個類似的任務(wù)中用一個父任務(wù)來包含所有的公用組件這個功能聽起來就比較有道理了。
開源化
開源到底好不好是個爭論了很久問題,咱們也別老調(diào)重彈了。我個人喜歡開源的東西,因為代碼的實現(xiàn)方式對我來說是比較重要的。所以我最起碼能檢查每一個我選擇的開源產(chǎn)品的實現(xiàn)代碼。
安全性
安全一直都是很重要的,應(yīng)該要具備開始和停止任務(wù)的用戶控制,而且不是所有人能看到批處理的元數(shù)據(jù)。
可伸縮性選項
可伸縮性是很重要的,我在這里列到第8點才說是因為最重要的伸縮性選項-Local Partitioning 已經(jīng)包含在JSR -352 里面了。但是還應(yīng)該有更多的選擇 ,例如Spring Batch 提供的 Multi-threaded Step,Remote Partitioning ,Parallel Step,Remote Chunking 等等選項,所以看看你的實現(xiàn)廠商有沒有提供其他的伸縮性選項。
可配置性
JSR-352 定義了基于XML的任務(wù)設(shè)置模型。Spring Batch 提供了基于Java (類型安全的)的配置方式,因此確保了編譯期間很多細節(jié)問題的處理而且在任意IDE下支持重構(gòu)。這個參考點對執(zhí)行批處理任務(wù)不是很重要,所以我放在第九位,但是也是個值得擁有的功能點。
可擴展性
擴展性是一個非常重要的參考點,但是我把它放在最后一位是因為JSR-352 的 API 已經(jīng)提供了基本上全部的用于可擴展的接口,例如啟動和停止任務(wù),查看批處理元數(shù)據(jù)和編寫自有組件等等。但是,可能你還是會需要沒有被包含在JSR-352標(biāo)準(zhǔn)里面的功能。
10條參考點,有些范圍太廣太淡,有些又是很必要很實用的,重要性的排序是基于我在一些大公司使用Spring Batch 的經(jīng)驗。你可能會有自己的排序或者有些其他想法,但是你得承認上面得這些參考點都是很重要的。 選擇JSR-352的實現(xiàn)廠商應(yīng)該慎重因為你可能會用很久。我也希望這些參考點在你需要做出選擇的時候能幫助你。
英文原文:10 criteria for choosing the right implementation of the JSR-352 (Java Batch)
譯文鏈接:http://www.oschina.net/translate/10-criteria-choosing-right-implementation-jsr-352-java-batch