Spring batch 我得到;必须先打开Writer,然后才能将其写入;使用ClassifierCompositeItemWriter时
这个问题说明了我的问题。除了使用单个编写器进行简单的块处理外,您不能使用FlatFileItemWriter(FFIW)作为编写器吗?我是新来的 我尝试将FFIW注入ItemProcessors,得到了同样的结果。也许我需要写我自己的定制作家。我试图利用FFIF来做这项工作,因为我所需要的只是筛选一个输入文件并填充三个输出文件。我的routerDelegate工作正常,没有问题。只是写操作失败,因为文件没有打开,我看不到如何手动打开它(我认为这是错误的方法,即使我可以) 谢谢 这是我的密码:Spring batch 我得到;必须先打开Writer,然后才能将其写入;使用ClassifierCompositeItemWriter时,spring-batch,Spring Batch,这个问题说明了我的问题。除了使用单个编写器进行简单的块处理外,您不能使用FlatFileItemWriter(FFIW)作为编写器吗?我是新来的 我尝试将FFIW注入ItemProcessors,得到了同样的结果。也许我需要写我自己的定制作家。我试图利用FFIF来做这项工作,因为我所需要的只是筛选一个输入文件并填充三个输出文件。我的routerDelegate工作正常,没有问题。只是写操作失败,因为文件没有打开,我看不到如何手动打开它(我认为这是错误的方法,即使我可以) 谢谢 这是我的密码:
<batch:step id="processCustPermits" next="somethingElse">
<batch:description>Sift permits></batch:description>
<batch:tasklet>
<batch:chunk reader="custPermitReader" writer="custPermitCompositeWriter"
commit-interval="1" />
</batch:tasklet>
</batch:step>
<bean id="custPermitCompositeWriter"
class="org.springframework.batch.item.support.ClassifierCompositeItemWriter">
<property name="classifier">
<bean
class="org.springframework.batch.classify.BackToBackPatternClassifier">
<property name="routerDelegate" ref="permitRouterClassifier" />
<property name="matcherMap">
<map>
<entry key="hierarchy" value-ref="custPermitWriter" />
<entry key="omit" value-ref="custPermitOmithWriter" />
<entry key="trash" value-ref="custPermitTrashWriter" />
</map>
</property>
</bean>
</property>
</bean>
<bean id="custPermitWriter" class="org.springframework.batch.item.file.FlatFileItemWriter">
<property name="resource" value="${sap.cust.permit.outfile.heirarchy}" />
<property name="lineAggregator" ref="passThroughLineAggregator" />
<property name="shouldDeleteIfExists" value="true" />
<property name="shouldDeleteIfEmpty" value="false" />
</bean>
<bean id="custPermitOmithWriter" class="org.springframework.batch.item.file.FlatFileItemWriter">
<property name="resource" value="${sap.cust.permit.outfile.omits}" />
<property name="lineAggregator" ref="passThroughLineAggregator" />
<property name="shouldDeleteIfExists" value="true" />
<property name="shouldDeleteIfEmpty" value="true" />
</bean>
<bean id="custPermitTrashWriter" class="org.springframework.batch.item.file.FlatFileItemWriter">
<property name="resource" value="${sap.cust.permit.outfile.trash}" />
<property name="lineAggregator" ref="passThroughLineAggregator" />
<property name="shouldDeleteIfExists" value="true" />
<property name="shouldDeleteIfEmpty" value="true" />
</bean>
筛选许可证>
有时候你必须仔细阅读。我将Streams元素添加到chunk元素中,瞧
<batch:step id="processCustPermits" next="somethingElse">
<batch:description>Sort out unwanted permits></batch:description>
<batch:tasklet>
<batch:chunk reader="custPermitReader" writer="custPermitCompositeWriter"
commit-interval="1">
<batch:streams>
<batch:stream ref="custPermitWriter" />
<batch:stream ref="custPermitOmithWriter" />
<batch:stream ref="custPermitTrashWriter" />
</batch:streams>
</batch:chunk>
</batch:tasklet>
</batch:step>
清理不需要的许可证>
对于那些喜欢Java配置而不喜欢XML配置的人,操作如下:
@Bean
public Step processCustPermits(StepBuilderFactory stepBuilderFactory,
@Qualifier("custPermitReader") ItemReader<Wscpos> custPermitReader,
@Qualifier("custPermitCompositeWriter") ItemWriter<Wscpos> custPermitCompositeWriter,
@Qualifier("custPermitWriter") FlatFileItemWriter<Wscpos> custPermitWriter,
@Qualifier("custPermitOmithWriter") FlatFileItemWriter<Wscpos> custPermitOmithWriter,
@Qualifier("custPermitTrashWriter") FlatFileItemWriter<Wscpos> custPermitTrashWriter)
{
return stepBuilderFactory.get("processCustPermits")
.<Wscpos, Wscpos> chunk(1)
.reader(custPermitReader)
.writer(custPermitCompositeWriter)
.stream(writerCustodyMismatch)
.stream(writerNoMatch)
.stream(custPermitTrashWriter)
.build();
}
@Bean
公共Step流程(StepBuilderFactory StepBuilderFactory,
@限定符(“custPermTreader”)ItemReader custPermTreader,
@限定符(“custPermitCompositeWriter”)ItemWriter custPermitCompositeWriter,
@限定符(“custPermitWriter”)FlatFileItemWriter custPermitWriter,
@限定符(“CustPermithWriter”)FlatFileItemWriter CustPermithWriter,
@限定符(“custPermitTrashWriter”)FlatFileItemWriter(custPermitTrashWriter)
{
返回stepBuilderFactory.get(“ProcessCustPermissions”)
.chunk(1)
.读卡器(客户机)
.writer(客户许可复合编写器)
.stream(writerCustodyMismatch)
.stream(writerNoMatch)
.stream(custPermitTrashWriter)
.build();
}
谢谢!这对我很有帮助,当你说你必须仔细阅读时,你有没有阅读内容的链接?我用的是一种说话的方式。我找到了一个例子,但我没有仔细阅读。将元素“stream”放在“chunk”中是我做错的部分。我把它排除在那个元素之外。很抱歉,这已经有一段时间了,我已经没有现成的例子了。SpringBatch非常有用。我很高兴这篇文章在某种程度上有所帮助。