我做了很多研究,但找不到以下问题的解决方案。我们正在使用Spring批处理来处理用户及其组,并在另一个表中创建关联。 用例是当我们发现用户组已更改时,我们需要删除以前的关联并创建新的关联。
我如何使用spring batch来做到这一点,因为处理器只会返回一件物品
public T process(T source) throws Exception {
LOG.info("Processing item: " + source);
T target = null;
//logic to find old and new group
if (!oldGroup.equals(newGroup)) {
LOG.debug("Group Changed");
//this is where I need to delete the old association and create a new one
}
return target;
}
答案 0 :(得分:1)
项目处理器的返回类型可以不同于输入类型(转换数据类型是项目处理器的典型用例)。您可以使用的一种技术是:
因此,在您的情况下,如果T
是User
,则项目处理器可能类似于:
public UserWrapper process(User source) throws Exception {
LOG.info("Processing item: " + source);
UserWrapper target = new UserWrapper(source);
//logic to find old an new group
if (!oldGroup.equals(newGroup)) {
LOG.debug("Group Changed");
target.setAssociationToDelete(xxx);
target.setAssociationToCreate(xxx);
// set any information useful to take action
}
return target;
}
相应的作者将输入UserWrapper
类型的条目,读取有关关联的信息以删除/创建并采取相应的行动。
您只需要为UserWrapper
找到一个好名字即可。您知道,命名很难:-)
希望这会有所帮助。
答案 1 :(得分:0)
有不同的方法来做到这一点。这是我的建议。
如果在读取时只能选择需要更改的记录,则不需要处理器。
有关实现的详细信息,请参阅https://docs.spring.io/spring-batch/trunk/reference/html/readersAndWriters.html,如果您仍然需要任何帮助,请告知我们。