Spring Batchを使用して、非常に大きなXMLファイルを処理する可能性のあるジョブを設定しています。適切に設定したと思いますが、実行時にジョブが実行され、入力が処理され、実行状態でハングすることがわかりました(JobRepositoryでJobExecutionのステータスを確認することで確認できます)。
バッチのドキュメントを数回読みましたが、欠落している明らかな「入力がなくなったときにジョブを停止する」構成が表示されません。
これが私のアプリケーションコンテキストの関連部分です:
<batch:job id="processPartnerUploads" restartable="true">
<batch:step id="processStuffHoldings">
<batch:tasklet>
<batch:chunk reader="stuffReader" writer="stuffWriter" commit-interval="1"/>
</batch:tasklet>
</batch:step>
</batch:job>
<bean id="stuffReader" class="org.springframework.batch.item.xml.StaxEventItemReader">
<property name="fragmentRootElementName" value="stuff" />
<property name="resource" value="file:///path/to/file.xml" />
<property name="unmarshaller" ref="stuffUnmarshaller" />
</bean>
<bean id="stuffUnmarshaller" class="org.springframework.oxm.jaxb.Jaxb2Marshaller">
<property name="contextPath" value="com.company.project.xmlcontext"/>
</bean>
<bean id="stuffWriter" class="com.company.project.batch.StuffWriter" />
重要な場合、「StuffWriter」は、書き込まれるアイテムをログに記録する単なるクラスです。
バッチやスタックスに関連する重要なニュアンスを見逃した場合はお知らせください。