我们有一个批处理作业来检查数据库数据。如果数据有任何问题,它将向输出文件写入一些内容。换句话说,它什么也不写。 但是,无论有没有问题,都会创建输出文件。 我们希望它在日期合适时不创建输出文件。
这里是我们的 xml.
<batch:job id="DEFAULT_JOB_ID">
<batch:step id="step">
<batch:tasklet transaction-manager="transactionManager" start-limit="100">
<batch:chunk reader="dbReader01" processor="testProc" writer="classifierWriter01" commit-interval="100" >
<batch:streams>
<batch:stream ref="fileWriter01"/>
</batch:streams>
</batch:chunk>
<batch:listeners>
<batch:listener ref="defaultChunkListener" />
</batch:listeners>
</batch:tasklet>
</batch:step>
<batch:listeners>
<batch:listener ref="defaultJobExecutionListener" />
</batch:listeners>
</batch:job>
<bean id="classifierWriter01" class="org.springframework.batch.item.support.ClassifierCompositeItemWriter" scope="step">
<property name="classifier">
<bean class="org.springframework.classify.BackToBackPatternClassifier">
<property name="routerDelegate">
<bean class="src.test.DefaultClassifier" />
</property>
<property name="matcherMap">
<util:map id="matcherMap" scope="step">
<!-- FLAG == 0 THEN write something -->
<entry key="0" value-ref="fileWriter01" />
<!-- FLAG == 1 THEN write nothing -->
<entry key="1" value-ref="dummyWriter" />
</util:map>
</property>
</bean>
</property>
</bean>
<bean id="fileWriter01" class="org.springframework.batch.item.file.FlatFileItemWriter" scope="step">
<property name="encoding" value="UTF-8" />
<property name="resource" value="file:#{jobParameters['outFile']}" />
<property name="appendAllowed" value="false"/>
<property name="shouldDeleteIfExists" value="true"/>
<property name="lineAggregator">
<bean class="src.test.DelimitedLineAggregator">
<property name="delimiter" value="," />
<property name="allEnclosing" value="true" />
<property name="enclosure" value='"' />
<property name="fieldExtractor">
<bean class="org.springframework.batch.item.file.transform.BeanWrapperFieldExtractor" >
<property name="names"
value="seq,errCode,errMsg" />
</bean>
</property>
</bean>
</property>
</bean>
<bean id="dummyWriter" class="src.test.DummyItemWriter" scope="step"/>
问题是当我们使用FlatFileItemWriter时,我们必须使用batch:streams创建outfile。但是如果我们使用batch:streams,outFile将在作业开始时创建。
如果我们不使用 batch:streams,它会抛出这个错误日志
org.springframework.batch.item.WriterNotOpenException: Writer must be open before it can be written to
itemWriter不能自己创建文件吗?
您可以使用专为此用例设计的FlatFileItemWriter
的
shouldDeleteIfEmpty参数。