如何将命令行参数转换为spring批处理作业

时间:2011-04-01 21:13:57

标签: spring command-line-arguments spring-batch

我正在使用CommandLineJobRunner来执行spring批处理作业。我想传递一组参数,但我遇到了一些问题。这是我的步骤:

    <bean id="loadTAReportsJob" class="org.springframework.batch.core.job.SimpleJob">
    <property name="steps">
        <bean id="loadStep" parent="simpleStep">
            <property name="itemReader">
                <bean id="reader" class="com.xyz.reporting.TAReportItemReader">
                    <property name="parm1" value="#{jobParameters['input.file']}" />
                    <property name="parm2" value="#{jobExecutionContext['input.file']}" />
                    <property name="parm3" value="#{stepExecutionContext['input.file']}" />
                </bean>
            </property>
            <property name="itemWriter">
                <bean id="writer" class="com.xyz.reporting.TAReportItemWriter">
                    <property name="reportDomainFacade" ref="reportDomainFacade"/>
                </bean>
            </property>
        </bean>
    </property>
    <property name="jobRepository" ref="jobRepository"/>
</bean>

CommandLineJobRunner报告:

2407 [P=717580:O=0:CT] INFO support.SimpleJobLauncher  - Job: [SimpleJob: [name=loadTAReportsJob]] launched with the following parameters: [{input.file=somefile.zip}{}{}{}]

但在我的ReportItemReader中,三个parms都解析为完整值:

#{jobParameters['input.file']}
#{jobExecutionContext['input.file']}
#{stepExecutionContext['input.file']}

也就是说,春季批次似乎没有解析#{JobXYZ ['parm name']。

我是否必须做一些特殊的事情来使spring解析该语法并进行属性查找?我是否需要连接一个JobParameters对象或其他东西来使这个东西工作?

BTW - 我正在使用Spring Batch 1.1.4来保持与java 1.4.2的兼容。

1 个答案:

答案 0 :(得分:4)

您可以考虑从

更改项目阅读器
<bean id="reader" class="com.xyz.reporting.TAReportItemReader"> 

<bean id="reader" class="com.xyz.reporting.TAReportItemReader" scope="step">