You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在writer调用前修改待传递的item列表?

解决方案

你可以通过封装原有ItemWriter实现自定义代理Writer来实现需求,这是Spring Batch下处理该类场景的标准实现方式,具体逻辑如下:

  • 自定义类实现ItemWriter<T>接口,将你原本使用的实际执行写入的Writer作为构造参数传入该自定义类
  • 重写write(List<? extends T> items)方法,方法内首先对传入的当前批次完整item列表做你需要的修改:包括去重、过滤、字段批量调整等自定义操作
  • 完成列表修改后,将调整后的列表传递给原有Writer的write方法执行实际写入逻辑
  • 最后在对应Step的配置中,把原本配置的Writer替换为这个自定义的代理Writer即可

示例代码

public class ModifyItemProxyWriter<T> implements ItemWriter<T> {
    private final ItemWriter<T> delegate;

    public ModifyItemProxyWriter(ItemWriter<T> delegate) {
        this.delegate = delegate;
    }

    @Override
    public void write(List<? extends T> items) throws Exception {
        // 此处编写列表修改逻辑,以下为去重示例
        List<T> modifiedItems = items.stream()
                .distinct()
                .toList();
        // 传入修改后的列表执行原写入逻辑
        delegate.write(modifiedItems);
    }
}

如果你的修改逻辑不需要复用到其他Step,也可以直接改造原有Writer的write方法,在执行写入逻辑前先处理item列表,无需单独封装代理类。

内容的提问来源于stack exchange,提问作者Arpan Parikh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 18:54:05