Java 是否将参数从spring批处理中的父作业传递给stepJob?

Java 是否将参数从spring批处理中的父作业传递给stepJob?,java,spring,spring-batch,Java,Spring,Spring Batch,我有三个层次的工作 <job id="job1"> <step id="step1" > <job ref="step1.job1.1" job-parameters-extractor="job1Parameters"/> </step> </job> <job id="job1.1"> <step id="step1.1" >

我有三个层次的工作

<job id="job1">     
    <step id="step1" >
        <job ref="step1.job1.1" job-parameters-extractor="job1Parameters"/>
    </step>     
</job>


<job id="job1.1">       
    <step id="step1.1" >
        <job ref="step1.1.job1.1.1"/>
    </step> 
</job>


<job id="job1.1.1">     
    <step id="step1.1.1" >
        <tasklet ref="ste1.1.1Tasklet" />
    </step>     
</job>

我想将param1=value1参数从顶级作业(job1)传递到job1.1,哪个参数应该再次传递到job1.1.1

如何在春季批量生产?我试着用

<util:map id="job1Parameters"
    map-class="org.springframework.beans.factory.config.MapFactoryBean">
    <beans:entry key="param1" value="value1" />
</util:map>

<beans:bean id="otherComputeJobParametersExtractor"
    class="org.springframework.batch.core.step.job.DefaultJobParametersExtractor"
    p:keys-ref="job1Parameters" />

但它不起作用

我知道我可以将它作为参数传递给job1,它将自动传递给子作业,但有许多参数,其中许多参数仅用于单独的子作业,因此我不想将所有参数传递给job1


我们是否可以添加任何步骤侦听器,该侦听器将在触发子作业之前在stepExecutionContext中添加param1=value1,以便通过stepExecutionContext将参数提供给子作业?

我可以通过将stepExecutionListener设置为在stepExecutionContext中pur param1=value1来实现

public class SetParam1StepListener implements StepExecutionListener {

    protected String param1;

    public String getParam1() {
        return param1;
    }

    public void setParam1(String param1) {
        this.param1 = param1;
    }

    @Override
    public ExitStatus afterStep(StepExecution stepExecution) {
        // TODO Auto-generated method stub
        return null;
    }

    @Override
    public void beforeStep(StepExecution stepExecution) {
        stepExecution.getExecutionContext().put("param1", this.param1); 

    }

}



<beans:bean id="value1.setParam1StepListener" class="com.my.SetParam1StepListener" p:param1="value1" />
公共类SetParam1StepListener实现StepExecutionListener{
受保护字符串参数1;
公共字符串getParam1(){
返回参数1;
}
公共void setParam1(字符串param1){
this.param1=param1;
}
@凌驾
公共出口状态后步骤(步骤执行步骤执行){
//TODO自动生成的方法存根
返回null;
}
@凌驾
预处理前的公共无效(步骤执行步骤执行){
stepExecution.getExecutionContext().put(“param1”,this.param1);
}
}
然后通过向jobParameterExtractor添加param1键

<beans:bean id="jobParametersExtractor"
    class="org.springframework.batch.core.step.job.DefaultJobParametersExtractor">
    <beans:property name="keys" value="param1" />
</beans:bean>

然后将其传递给step job

<job id="job1">     
    <step id="step1" >
        <job ref="step1.job1.1" job-parameters-extractor="jobParametersExtractor"/>
        <listeners>
            <listener ref="value1.setParam1StepListener" />
        </listeners>
    </step>     
</job>

它起作用了