FlatFileItemReader在处理文件后读取相同的文件

时间:2015-05-07 05:40:53

标签: spring spring-batch

我正在编写一个Spring Batch作业调度程序。我需要读取一些特定模式的多个文件,我配置了xml如下...

<bean id="multiResourceReader1"
        class=" org.springframework.batch.item.file.MultiResourceItemReader">
        <property name="resources"
            value="file:#{ fileLocation + '/FILE1*.txt'}" />
        <property name="delegate" ref="itemReader1" />
        <property name="saveState" value="false" />
    </bean>
<bean id="itemReader1" class="org.springframework.batch.item.file.FlatFileItemReader" scope="step">
        <property name="strict" value="false" />
        <property name="lineMapper" ref="prefixMatchingLineMapper1" />
    </bean>

其中filelocation是jndi字符串值。

问题:当我在15分钟后运行的应用服务器上部署代码时,在读完一些文件(如FILE1_2015_03_04.txt)后,处理完成并将这些文件归档。现在文件位置没有拥有以前的文件或者可能有不同的文件名,但是春季批量尝试读取相同的文件FILE1_2015_03_04.txt并且警告来了 - doOpen&#34;输入资源不存在&#34;。

从评论中更新 我已经配置了cron调度程序,下面是作业的配置:

<batch:job id="ioSampleJob" restartable="false">
  <batch:step id="step1">
    <batch:tasklet>
      <batch:transaction-attributes propagation="NEVER" />
      <batch:chunk reader="multiResourceReader1" writer="itemWriter1" chunk-completion-policy="completionPolicy" /> 
    </batch:tasklet> 
  </batch:step>
</batch:job>

请帮忙解决问题。 谢谢Vishal

1 个答案:

答案 0 :(得分:0)

我知道稍后会发生,但是如果您在这里,那是因为您像我一样面临着这个问题。 要解决此问题,您应该在XML中以分离的方式创建FileSystemResource的Bean。

<bean id="customFileItemReader" class="org.springframework.batch.item.file.FlatFileItemReader" scope="step">
    <property name="resource" ref="customFile"/><!-- avoid use directly jobParams here -->
    <property name="linesToSkip" value="0" />
    <property name="encoding" value="ISO-8859-1" />
    <property name="comments" value="*, \u001A" />
    <property name="lineMapper">
        <bean class="org.springframework.batch.item.file.mapping.DefaultLineMapper">
            <property name="lineTokenizer">
                <bean class="org.springframework.batch.item.file.transform.DelimitedLineTokenizer">
                    <property name="delimiter" value=";" />
                </bean>
            </property>
            <property name="fieldSetMapper">
                <bean class="br.com.sample.batch.CustomFieldSetMapperSIAW"/>
            </property>
        </bean>
    </property>
</bean>



<bean id="customFile" class="org.springframework.core.io.FileSystemResource" scope="step">
    <constructor-arg value="#{jobParameters[arquivoGSIN]}"></constructor-arg>
</bean>