当前位置: 首页 > 知识库问答 >
问题:

ItemWriter提交仅在第一个提交间隔内提交

居飞扬
2023-03-14

我试图从数据库中选择数据,更新每个对象,然后在项目管理器中更新数据库。

我试图在每次更新后刷新DAO,但没有任何改变。

该配置非常基本,有一个读写器,提交间隔为100。

读者正在按预期工作:

java prettyprint-override">@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批处理表显示,它读取所有记录并多次提交,但当我签入数据库时,它只提交一次。

Spring batch的版本是2.2.6。

使现代化

我认为这个问题是由于与数据库的事务,因为现在它根本不提交给数据库。但我现在想不出来。

共有1个答案

王成化
2023-03-14

问题是您从ItemReader返回null。如果您返回null Spring批处理将假定提要已结束,它将终止作业。由于您在每个块(在您的情况下为100)后返回null,因此Sprint批处理在处理100条记录后被终止。

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

 类似资料:
  • 问题内容: 我有以下代码,基本上它正在执行两个操作。第一个是将我的表单数据提交到google电子表格,另一个操作是将我的第二个表单文本框值数据提交到另一个页面文本框值。这个怎么做? 从上面可以看到,这是第一页,第二页是第二种形式的Sankranthi_Reserv2.asp。我想在那儿传递文本框值,所以问题是第一种形式是提交给Google文档并存储数据,但是第二种形式需要将手机号码文本框值传递给下

  • 在cherry-pick,您可以从其他分支复制指定的提交,然后导入到现在的分支。 主要使用的场合: 把弄错分支的提交移动到正确的地方 把其他分支的提交添加到现在的分支

  • Commit(提交)就是把修改保存到仓库里。 用法 git commit 选项 -a(--all),把所有修改与删除自动添加到暂存区然后提交。不包含未跟踪文件。 -m(--message),设置提交信息。 练习 1,打开 resources.md ,添加一行文字: # 相关资源 保存文件,再去修改一下: git commit -am '设置相关资源文档标题' 这次用了 -a 选项,它会自动把

  • 说明 支付宝报关接口 官方文档:https://docs.open.alipay.com/155/104778/ 类 请求参数类 请求参数 类名:\Yurun\PaySDK\AlipayCrossBorder\Customs\Submit\Request 属性 名称 类型 说明 $service string 接口名称 $out_request_no string 商户生成的用于唯一标识一次报关操

  • 说明 微信支付-订单附加信息提交接口SDK。 官方文档:https://pay.weixin.qq.com/wiki/doc/api/external/declarecustom.php?chapter=18_1 类 请求参数类 请求参数 类名:\Yurun\PaySDK\Weixin\CustomDeclareOrder\Request 属性 名称 类型 说明 $_apiMethod strin

  • 我正在尝试使用php和mysql进行在线测验/调查!我第一次使用php!我想做的是从我的数据库中获取问题和它的多项选择(测验和表格问题,其中Qid、Qtext、Ans1..Ans4作为其6列),一旦用户完成测验,就按下最后一个问题的提交按钮。。所有答案应保存在Db中(测验和表格答案,以Aid、Ans、Qid作为其列)!我搜索了相关的代码,但一个都听不懂。如果有人能帮忙,我将不胜感激。谢谢