我正在使用Spring Batch。
文件中的流读取项如下:
来自official Spring batch documentation的图片
我正在使用批量块。
<batch:step id="myImportStep">
<batch:tasklet>
<batch:chunk reader="myFileItemReader" processor="myFileProcessor" writer="myFileWriter" chunk-completion-policy="myCompletionPolicy" skip-limit="1000000" retry-limit="3">
... Some excetions and listeners
</batch:chunk>
</batch:tasklet>
</batch:step>
我有一个文件,我在项目阅读器中处理,我逐行阅读,然后在我的处理器中创建自己的自定义订单对象。在每个第10个订单项创建后,根据完成策略,订单对象列表将传递给编写者以执行实际订单。
我的商业案例说,在执行编写程序进程时(也就是当我创建了10个订单对象的列表时)去运行一些逻辑以查看是否需要创建其他订单对象。
public class myWriter implements ItemWriter<OrderObject> {
public void write(final List<? extends OrderObject> items) throws Exception {
//apply logic here to see if an additional order should be created
//problem is that the list of items cannot be modified to add more items to it
//which make sense... if the itemWriter gets called in chunks of 10 then you simply
//can't add a new order in between. What I am looking to do... is there way to access this
//list of orders to add more to it... or another suggestion on how to add the original list of
//orders and to be able to add more
但我不知道如何获取对处理器创建的原始订单列表的访问权限。即使我可以在列表的后面添加订单,这些订单将在稍后阶段再次发送给Writer。关于如何做这样的事情的任何其他建议?
基于Kayaman提出的问题: 我同意我可以创建一个新的ArrayList&lt;&gt;(项目)并添加或修改列表。但这不会改变从一个步骤传递到另一个步骤的主要项目列表。
ItemWriter的接口接受List参数:
package org.springframework.batch.item;
import java.util.List;
public interface ItemWriter<T> {
void write(List<? extends T> var1) throws Exception;
}
答案 0 :(得分:2)
为什么不使用ItemWriteListener的beforeWrite()
方法?
在ItemWriter.write(java.util.List)之前调用