在写入数据库之前使用 spring 批次处理一批记录
processing batch of records using spring batch before writing to DB
在 spring 批处理代码中,我正在读取 100 条记录。对于块中的每条记录,我正在检查该记录是否存在于数据库中。如果记录存在于数据库中,我不会插入它。
第一次,如果我在 100 块中有重复记录,spring 批处理器无法识别该记录是重复的,因为数据库中没有数据,处理器将 select先全部100再执行insert
有没有一种方法可以先在 100 个块内执行检查,然后检查数据库,然后在这两个之后插入数据库?
您可以实施自己的自定义 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;
}
}
在 spring 批处理代码中,我正在读取 100 条记录。对于块中的每条记录,我正在检查该记录是否存在于数据库中。如果记录存在于数据库中,我不会插入它。
第一次,如果我在 100 块中有重复记录,spring 批处理器无法识别该记录是重复的,因为数据库中没有数据,处理器将 select先全部100再执行insert
有没有一种方法可以先在 100 个块内执行检查,然后检查数据库,然后在这两个之后插入数据库?
您可以实施自己的自定义 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;
}
}