Joe Zitzelberger
Joe Zitzelberger

Reputation: 4263

How to get command line parameters into a spring batch job

I am using a CommandLineJobRunner to execute a spring batch job. I want to pass in a set of parameters, but I'm running into some problems. This is my step:

    <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>

The CommandLineJobRunner reports that:

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

But in my ReportItemReader, the three parms all resolve to the full value:

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

That is, spring batch doesn't seem to be resolving the #{JobXYZ['parm name'].

Do I have to do something special to make spring resolve that syntax and do the property lookup? Do I need to wire up a JobParameters object or something to make this thing work?

BTW - I'm using Spring Batch 1.1.4 to keep compat with java 1.4.2.

Upvotes: 2

Views: 13940

Answers (1)

Kivanc
Kivanc

Reputation: 256

You might consider changing your Item Reader from

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

to

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

Upvotes: 4

Related Questions