我正在编写一个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
答案 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>