Spring 批量如何在发送之前过滤重复元素 ItemWriter

我读了一个平面文件 /例如,文件 .csv 从 1 例如,用户排行:

UserId; Data1;Date2

/.

但是如何在读者中处理重复的用户元素 /哪里没有先前读取用户的列表....../


stepBuilderFactory.get/"createUserStep1"/
.<user, user="">chunk/1000/
.reader/flatFileItemReader/ // FlatFileItemReader
.writer/itemWriter/ // For example JDBC Writer
.build//;


</user,>
已邀请:

卫东

赞同来自:

通常使用过滤
ItemProcessor

. 如果一个
ItemProcessor

回报 null, 该元素被过滤并没有传输到
ItemWriter

. 否则就是。 在您的情况下,您可以保存先前见过的用户的列表
ItemProcessor

. 如果用户尚未见到用户,请进一步传递。 如果你之前见过,返回 null. 您可以阅读更多关于Filtration的信息
ItemProcessor

在这里的文档中:
http://docs.spring.io/spring-b ... cords

/**
* 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// {
return null;
}
seenUsers.add/user/;
return user;

}
}


</user></user></user,>

八刀丁二

赞同来自:

你怎么能在这里看到
http://docs.spring.io/spring-b ... erant
当读取时高速缓存的回滚块项时,可以重新处理。 如果该步骤设置为容错 /通常使用通过处理或重复尝试/, 然后有人使用过 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/ &amp;&amp; !user.hasBeenProcessed/// {
return null;
} else {
seenUsers.add/user/;
user.setProcessed/true/;
return user;
}
}
}


</user></user></user,>

要回复问题请先登录注册