gpt4 book ai didi

java - ItemWriter 仅提交第一个提交间隔

转载 作者:行者123 更新时间:2023-12-02 09:56:05 25 4
gpt4 key购买 nike

我正在尝试从数据库中选择数据,更新每个对象,然后更新项目写入器中的数据库。

我尝试在每次更新后刷新 DAO,但它没有改变任何内容。

配置非常基本,包括读取器、写入器和 100 的提交间隔。

阅读器正在按预期工作:

@Override
public Order read() throws Exception, UnexpectedInputException, ParseException, NonTransientResourceException {
if(iterator == null) {
List<Order> all = findOrders();
iterator = all.listIterator();
}

if (iterator.hasNext()) {
return iterator.next();
} else {
return null;
}
}

作者也很基础:

public void write(List<? extends Order> items) throws Exception {
@SuppressWarnings("unchecked")
List<Order> listOrder = (List<Order>) items;

try {
for(Order o : listOrder) {
etatCommandeServiceImpl.updateEtatCommande(o);
}
}catch(Exception e) {
if (log.isErrorEnabled()) {
log.error("ERROR {}", e);
}
throw e;
}
}

问题是前 100 条记录已提交,但其余记录未提交。 Spring批处理表显示它读取所有记录并多次提交,但是当我 checkin 数据库时​​它只提交一次。

Spring-batch的版本是2.2.6。

更新

我认为这个问题是由于与数据库的事务造成的,因为现在它根本没有提交到数据库。但一时想不通。

最佳答案

问题是您从 ItemReader 返回 null。如果返回 null,Spring 批处理将假定已到达提要末尾,并将终止作业。由于您在每个 block (在您的情况下为 100)之后返回 null,因此 Sprint 批处理在处理 100 条记录后将终止。

请使用 @PostConstruct 创建方法并获取要处理的所有记录,并将 ItemReader 更改为一次返回 1,并在读取所有记录时返回 null。

关于java - ItemWriter 仅提交第一个提交间隔,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56001779/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com