문제

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