Как вы могли видеть здесь http://docs.spring.io/spring-batch/trunk/reference/html/readersAndWriters.html#faultTolerant
Когда кусок откатывается, элементы, которые были в кэше во время чтения может быть переработано. Если шаг сконфигурирован, чтобы быть терпимым ошибка (использование пропустить или повторить обработку обычно), любая ItemProcessor используется должна быть реализована таким образом, что идемпотентна
Это означает, что в примере Майкла, первый раз, когда пользователь Обработанные пользователя кэшируется в наборе, и если происходит сбой Написание детали, если шаг отказоустойчивость процессора будет выполняться снова для того же пользователя, и это Фильтр отфильтрует пользователь.
Улучшен код:
/**
* This implementation assumes that there is enough room in memory to store the duplicate
* Users. Otherwise, you'd want to store them somewhere you can do a look-up on.
*/
public class UserFilterItemProcessor implements ItemProcessor<User, User> {
// This assumes that User.equals() identifies the duplicates
private Set<User> seenUsers = new HashSet<User>();
public User process(User user) {
if(seenUsers.contains(user) && !user.hasBeenProcessed()) {
return null;
} else {
seenUsers.add(user);
user.setProcessed(true);
return user;
}
}
}
После выборки мои последние вопросы по StackOverflow, я нашел решение (что вы говорите): http://stackoverflow.com/a/26318180/1121571 Это лучшее решение (сохранить список в процессоре элементов), потому что список, который я передал в ItemWriter, так, где он хранится внутри? Как я могу получить к нему доступ правильно? – Aure77
Это была бы обычная реализация 'ItemProcessor', поэтому вам решать, где хранить ранее просматриваемых пользователей. –
Как сохранить последнюю запись? –