領先一步
VMware 提供培訓和認證,以加速您的進展。
瞭解更多謹代表團隊和所有貢獻者,我很高興地宣布 Spring Batch 5.0.0-M7
現在可以從我們的 里程碑儲存庫取得。
這個里程碑的主要主題是改善 Spring Batch 中任務參數的處理。此版本引入了兩個主要變更
這篇部落格文章將詳細介紹這兩個主要變更。如需完整的變更清單,請查看發佈說明。
在 4.x 版本之前,Spring Batch 僅支援 4 種可以作為任務參數使用的類型,分別是 long
、double
、String
和 Date
。雖然這方便簡化了框架端的任務參數處理,但最終卻限制了使用者端。例如,如果有人想要使用 boolean
或自訂類型作為任務參數該怎麼辦?這需要額外轉換為 Spring Batch 中支援的類型之一,這很快就讓使用者感到不便。
在這個版本中,我們新增了支援使用任何類型作為任務參數。此改善背後的主要變更是以下內容
---public class JobParameter implements Serializable {
+++public class JobParameter<T> implements Serializable {
--- private Object parameter;
+++ private T value;
--- private ParameterType parameterType;
+++ private Class<T> type;
}
此變更會影響任務參數在資料庫中的持續性。請查看遷移指南以瞭解資料庫結構描述變更。參數類型的完整名稱現在以 String
形式持續保存,參數值也是如此。字串文字會使用標準 Spring 轉換服務轉換為參數類型。可以使用任何必要的轉換器來擴充標準轉換服務,以將使用者特定類型轉換為字串文字,以及從字串文字轉換。
v4 中任務參數的預設表示法指定如下
[+|-]parameterName(parameterType)=parameterValue
其中 parameterType
是 [string,long,double,date]
其中之一。雖然這種表示法簡潔,但它顯示出一些限制,因為它與環境變數配合不佳,並且對 Spring Boot 不友善。
在 v5 中,我們已將預設表示法變更如下
parameterName=parameterValue,parameterType,identificationFlag
其中 parameterType
是參數類型的完整名稱。例如,以下鍵/值組
schedule.date=2022-12-12,java.time.LocalDate
將轉換為類型為 java.time.LocalDate
且值為 2022-12-12
的識別任務參數。請注意,識別旗標是選擇性的,預設為 true
。這種新的預設表示法非常適合大多數使用案例,但當值包含逗號時可能不方便。因此,我們引入了一種新的「擴充」表示法,其靈感來自 Spring Boot 的 Json 應用程式屬性,其指定如下
parameterName='{"value": "parameterValue", "type":"parameterType", "identifying": "booleanValue"}'
其中 parameterType
是參數類型的完整名稱。Spring Batch 提供 JsonJobParametersConverter
以支援此表示法。當然,可以透過實作策略介面 JobParametersConverter
並在任務儲存庫和任務瀏覽器中註冊自訂實作來支援任何其他表示法。
我們相信 Spring Batch 中這兩個主要的任務參數處理變更更加方便、更具彈性且更不易出錯。
我要感謝所有在此版本中扮演角色的貢獻者!當我們繼續在 Spring Batch 5 上努力時,我們期待您在 Github、Twitter 和 StackOverflow 上的意見回饋。