在写入数据库之前,使用spring batch处理一批记录

use*_*502 4 spring-batch

在春季批处理代码中,我正在读取100条记录的块。对于块中的每个记录,我正在检查记录是否存在于数据库中。如果该记录存​​在于数据库中,则不会插入。
第一次,如果我在100个数据块中有一条重复记录,由于数据库中没有数据,spring batch处理器将无法识别该记录是重复的,并且处理器将首先选择所有100条,然后执行插入。

有没有一种方法可以先在100个数据块中执行检查,然后再检查数据库,然后将这两个插入数据库中?

Thr*_*rax 5

您可以实现自己的定制ItemProcessor以检查重复项并将其删除。

这是一个例子:

public class DropDuplicateItemProcessor<T> implements ItemProcessor<T, T> {

    // Will be used to save previous items;
    private List<T> previousItems = new ArrayList<T>();

    @Override
    public T process(T item) throws Exception {

         // Check for duplicates with your own logic (method equals)
         if (previousItems.contains(item))
             return null; // Drop duplicate

         // Save item to check for duplicates later
         previousItems.add(item);

         // Continue with non-duplicate item
         return item;
    }

}
Run Code Online (Sandbox Code Playgroud)