java batch_Java EE 7 Batch中传递属性/参数的2种方式
java batch
談到Java EE 7批處理功能,有兩種方法可以將屬性/參數傳遞給塊和批處理。 本快速指南向您展示了兩種方式,在開發批處理Java EE 7方式時可能會經常使用它們。
1.運行前預定義的屬性/參數
預定義屬性是您在部署應用程序之前定義的屬性(名稱/值對)。 換句話說,它是固定的和靜態的,從不動態的,并且在檢索值時,它們將始終保持不變。 這是通過作業描述符XML文件完成的,該文件位于例如META-INF / batch-jobs / demo-job.xml中 。 例如:
<?xml version="1.0" encoding="UTF-8"?> <job id="demoJob" xmlns="http://xmlns.jcp.org/xml/ns/javaee" version="1.0"><properties><property name="staticParamName1" value="staticParamValue1" /><property name="staticParamName2" value="staticParamValue2" /></properties><!-- Then, the rest of the steps definition --> </job>它所要做的就是將每個預定義的屬性放在<properties />標記內。 部署應用程序后,這些屬性將對運行時XML文件中定義的ItemReader,ItemProcessor,ItemWriter和Batchlet的對象可用。
這是一個有關在運行時如何檢索預定義屬性/參數的示例。
@Dependent @Named( "DemoReader" ) public class DemoReader extends AbstractItemReader {@Injectprivate JobContext jobCtx;@Overridepublic void open( Serializable ckpt ) throws Exception {// Retrieve the value of staticParamName1 defined in job descriptor XMLString staticParamValue1 = jobCtx.getProperties().getProperty( "staticParamName1" );// The rest of the implementation}// The rest of the overridden methods }不利的一面是,屬性值在整個運行期間始終保持不變。 如果需要將動態值傳遞給批處理步驟對象,請繼續閱讀...
2.在運行時動態傳遞屬性/參數
在某些情況下,批處理運行期間需要動態屬性/參數值。 為此,首先必須定義屬性/參數,并將作業操作員傳遞給批處理作業。
例如,我有一個JobOperator (Singleton EJB),它將通過方法runBatchJob()啟動批處理作業,該方法將兩個動態屬性/參數傳遞給批處理作業對象:
@Singleton public class BatchJobOperator implements Serializable {public void runBatchJob() {Properties runtimeParameters = new Properties();runtimeParameters.setProperty( "dynamicPropertyName1", "dynamicPropertyValue1" );runtimeParameters.setProperty( "dynamicPropertyName2", "dynamicPropertyValue2" );JobOperator jo = BatchRuntime.getJobOperator();// Run the batch job with the runtimeParameters passedjo.start( "name-of-job-xml-file-without-dot-xml", runtimeParameters );} }一旦應用程序服務器運行了作業,該作業中涉及的對象(ItemReader,ItemProcessor,ItemsWriter和Batchlet)就可以檢索runtimeParameters中設置的屬性,但是使用另一種方式。 這是在ItemReader中執行操作的方式(其余的批處理作業步驟對象也是如此):
@Dependent @Named( "DemoReader" ) public class DemoReader extends AbstractItemReader {@Injectprivate JobContext jobCtx;@Overridepublic void open( Serializable ckpt ) throws Exception {// Here's how to retrieve dynamic runtime properties / parametersProperties runtimeParams = BatchRuntime.getJobOperator().getParameters( jobCtx.getExecutionId() );String dynamicPropertyValue1 = runtimeParams.getProperty( "dynamicPropertyName1" );String dynamicPropertyValue2 = runtimeParams.getProperty( "dynamicPropertyName2" );// The rest of the implementation}// The rest of the overridden methods }注意區別,不是從JobContext獲取屬性,而是必須通過傳遞Job Context的執行ID從BatchRuntime的JobOperator獲取動態運行時定義的屬性。
希望這是有用的。
翻譯自: https://www.javacodegeeks.com/2014/09/2-ways-of-passing-properties-parameters-in-java-ee-7-batch.html
java batch
總結
以上是生活随笔為你收集整理的java batch_Java EE 7 Batch中传递属性/参数的2种方式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 桌面版linux哪个好(桌面版 linu
- 下一篇: 具有InlfuxDB的Spring Bo