I am trying to access a job parameter from a mapper file. The following in part of my xml code :

<!-- job -->
<job id="processEFTFileJob" restartable="true"  >
    <step id="step1">
        <tasklet>
            <chunk reader="sDItemReader" writer="sDItemWriter" processor="sDItemProcessor" commit-interval="1" />
        </tasklet>
    </step>
    <validator ref="sDJobParametersValidator"></validator>  
    <listeners>
        <listener ref="jobFailureListener"/>
    </listeners>
</job>

<!-- job parameter -->
<beans:bean id="sDJobParametersValidator" class="com.cv.cib.common.gfmas.aob.s.d.SDJobParametersValidator">
     <beans:property name="fileParameterName" value="${filetojob.fileParameterName}"/>
</beans:bean>

<beans:bean id="sDItemReader" class="org.springframework.batch.item.file.FlatFileItemReader" scope="step">
     <beans:property name="resource" value="file:#{jobParameters['input.file.name']}" />
     <beans:property name="lineMapper" ref="sDLineMapper" />
</beans:bean>

 <beans:bean id="sDLineMapper" class="org.springframework.batch.item.file.mapping.PatternMatchingCompositeLineMapper">
    <beans:property name="tokenizers">
        <beans:map>
            <beans:entry key="01*" value-ref="header" />
            <beans:entry key="02*" value-ref="details" />
        </beans:map>
    </beans:property>
    <beans:property name="fieldSetMappers">
        <beans:map>
            <beans:entry key="01*" value-ref="sDHeaderLineMapper" />
            <beans:entry key="02*" value-ref="sDDetailsLineMapper" /> 
        </beans:map>
    </beans:property>
 </beans:bean>

<!-- point to mapper java file respectively -->
 <beans:bean id="sDHeaderLineMapper" class="com.cv.cib.common.gfmas.aob.s.d.SDHeaderFieldSetMapper" />
 <beans:bean id="sDDetailsLineMapper" class="com.cv.cib.common.gfmas.aob.s.d.SDDetailsFieldSetMapper" />

I can access the file name in SDJobParametersValidator.java and do my validation here.

However, I would like to access the file name in SDHeaderFieldSetMapper.java also, Google long time but yet cant get the solution. Any ideas on this?

The following is part of my code in SDJobParametersValidator.java to get the file name :

public void validate(JobParameters parameters)
            throws JobParametersInvalidException {
//some other code here
final String name = parameters.getString( fileParameterName );

        File file = new File( name );
        logger.debug( file.getName( ) );

//some other code here
}
有帮助吗?

解决方案

To get a job parameter, you inject it into a step scoped bean. You're already doing that with the sDItemReader. To get it in your mapper, add a setter, say setFileName(String name), and configure your mapper like below:

<beans:bean id="sDHeaderLineMapper" class="com.cv.cib.common.gfmas.aob.s.d.SDHeaderFieldSetMapper" scope="step">
    <beans:property name="fileName" value="#{jobParameters['input.file.name']}"/>
</beans:bean>
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top