以下是我的春季批量配置:我使用mutiresourcepartitioner来分区10个文件。
<job id="test" xmlns="http://www.springframework.org/schema/batch">
<step id="master">
<partition step="step2" partitioner="multiPartioner">
<handler grid-size="3" task-executor="taskExecutor" />
</partition>
</step>
</job>
<bean id="multiPartioner"
class="org.springframework.batch.core.partition.support.MultiResourcePartitioner"
scope="step">
<property name="resources" value="file:#{jobParameters[fileDirectory]}/*" />
</bean>
<bean id="taskExecutor"
class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor">
<property name="corePoolSize" value="10" />
<property name="maxPoolSize" value="30" />
</bean>
<step id="step2" xmlns="http://www.springframework.org/schema/batch">
<tasklet transaction-manager="transactionManager">
<chunk reader="multiReader" writer="testWriter"
commit-interval="5000">
</chunk>
</tasklet>
</step>
<bean id="testWriter" class="org.test.customWriter" scope="step" />
<bean id="multiReader"
class="org.springframework.batch.item.file.MultiResourceItemReader"
scope="step">
<property name="resources" value="#{stepExecutionContext['fileResource']}" />
<property name="delegate" ref="flatFileItemReader" />
</bean>
但我经常会遇到NonTransientFlatFileException:无法读取资源。看到日志后才知道One thread可能正在尝试从文件1中读取下一个项目,而另一个线程正在关闭当前已完成的输入文件1,从而导致I / O异常。
如果发生此异常,我们也尝试重试,但由于它是非暂时性异常,我们无法重试。
是否有任何解决方案可以在春季批次中克服此异常。许多使用multiresourceItemPartioner分区的人也会面临这个例外吗?
网格大小会对分区产生任何影响吗?是否有其他任何配置导致此问题再次发生?