2014-05-07 26 views
1

我有三個層次的職位。在spring批處理中將參數傳遞給父作業中的stepJob?

<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爲子作業提供參數?

回答

2

我可以使用stepExecutionListener來設置stepExecutionContext中的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" /> 

然後通過添加參數1鍵jobParameterExtractor

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

,然後把它傳遞給步工作

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

它的工作原理。

相關問題