我的批处理作业阅读器返回Nullpointerexception,但文件仍然生成。为什么会这样?我认为当读者和处理器完成这个过程时,作者才会被调用?
<bean id="myWriter" class="org.springframework.batch.item.file.FlatFileItemWriter" >
<property name="resource"
value="file:D:\out\file.txt" />
<property name="lineAggregator">
<bean
class="org.springframework.batch.item.file.transform.PassThroughLineAggregator" />
</property>
<property name="footerCallback" ref="myCustomWriter" />
<!-- <property name="headerCallback" ref="myCustomWriter" /> -->
</bean>
<bean id="myCustomWriter" class="com.spring.batch.MyWriter"
scope="step">
<property name="delegate" ref="myWriter" />
<property name="stepContext" value="#{stepExecution.stepName}" />
</bean>
答案 0 :(得分:3)
你的意思是什么?它是空的,还是包含数据?
在执行某个步骤之前,spring-batch框架为读者和作者调用ItemStream接口的open()方法(前提是你有Readers和Writers实现ItemStream)。
查看FlatFileItemWriter实现。您会看到它实现了ItemStream,因此具有open()方法的实现。
更详细地查看代码,您会看到open()调用doOpen(),它调用HeaderCallback(如果已定义)。因此,在调用writer-method或Reader的reader-method之前,会生成文件并写入标题。
我建议你在开放的Reader and Writer方法中放置一个断点,并在spring-batch框架的代码中稍微调试一下。它将使您更好地了解“引擎盖下”的情况。
这可能超出了您的初始问题的范围,但如果您想深入研究一步中的“交易处理”,TobiasFlöhre有三篇优秀的博客文章涵盖了这一主题:
答案 1 :(得分:0)
步骤的提交间隔控制何时调用writer。它的工作方式是
在[{3}}
章节的文档中对此进行了详细说明