Java EE 7 Batch中传递属性/参数的2种方式

对于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 {
    @Inject
    private JobContext jobCtx;
 
    @Override
    public void open( Serializable ckpt ) throws Exception {
 
        // Retrieve the value of staticParamName1 defined in job descriptor XML
        String 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 passed
        jo.start( "name-of-job-xml-file-without-dot-xml", runtimeParameters );
    }
}

一旦应用程序服务器运行了作业,该作业中涉及的对象(ItemReader,ItemProcessor,ItemsWriter和Batchlet)就可以检索在runtimeParameters中设置的属性,但是使用另一种方式。 这是在ItemReader中执行操作的方式(其余的批处理作业步骤对象也是如此):

@Dependent
@Named( "DemoReader" )
public class DemoReader extends AbstractItemReader {
    @Inject
    private JobContext jobCtx;
 
    @Override
    public void open( Serializable ckpt ) throws Exception {
 
        // Here's how to retrieve dynamic runtime properties / parameters
        Properties 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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值