如何处理所有已阅读项目,而不是一对一处理?

时间:2019-07-16 16:33:47

标签: java spring spring-batch

我想验证表中共享生产者的记录的开始和结束日期。我将按照productId的顺序JDBCItemReader读取数据库中的所有寄存器。

这是我的桌子的一个例子:

ID|Name|StartDate|EndDate|ProductID|.....

在正常的块处理中,我将一对一地读取-处理项目,然后将其写入,但我想在我的处理器中恢复一个列表,同时ProductId不变,并且当此ID发生变化时,请进行一些验证和更新我的作品,然后将它们传递给作家,但我认为这是不可能的,因为我无法将作品列表发送给作家,我必须将它们一对一地发送。

我需要做的例子(伪描述):

@Component
public class CheckAuxDuplicatesProcessor implements ItemProcessor<MyDTO, MyDTO>{


    private BigDecimal currentProdIdProduct = BigDecimal.ZERO;
    private List<MyDTO> currentList;

    @Override
    public MyDTO process(MyDTO arg0) throws Exception {
        if(!currentProdIdProduct.equals(dto.getProdIdProduct())){
            //call to process items (Not implemented yet)
            //return list of items
            currentList.clear();
        }
        currentList.add(dto);
        return null;
    }

}

如果我创建一个完整的 Tasklet 类并在execute method中实现所有逻辑(读取所有寄存器),循环并进行验证,对其进行编辑,最后通过给读者看。

无论如何,我认为这最后一个选择是一个糟糕的设计想法。但是我不知道有什么其他方法可以制作这样的东西。

1 个答案:

答案 0 :(得分:0)

看看AggregateItemReader的灵感。您可以使用它来创建聚合项目(项目列表)为组。

在这种情况下,当阅读项目时ID发生变化时,您可以认为您正在建立一个新组。

希望这会有所帮助。