有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java spring批处理rowNum没有增加

我有一个Spring批处理任务,从数据库中获取几行数据来做一些事情

我想在RowMapper的第一行做点什么

public myVO mapRow(ResultSet rs, int rowNum) throws SQLException {
    System.out.println("rowNum is " + rowNum);
    if (rowNum == 1) {
        // do something
    }
    // some other code here
}

一开始这对我来说很好。但是,在读卡器部分的批处理xml文件中添加scope="step"之后,rowNum将始终为0,而不是从0开始并增加

在我想维护scope="step"的时候,有什么方法可以解决这个问题


共 (2) 个答案

  1. # 1 楼答案

    Scope=“step”的含义是,它为执行的每个步骤创建一个实例,这意味着您将为每个线程创建一个新实例

    因此,应该发生的是,一旦定义了“步骤”范围,映射行就会被处理器的新实例调用,并且它的起始值为0。当您说在删除步骤范围时它工作正常时,会进一步指出这一点

    因此,您可以做的是,保持一个静态原子整数(线程安全)并依赖于该计数器进行逻辑,而不是依赖于行数

    如果这样做没有意义,请共享您的配置以进行进一步分析。谢谢

  2. # 2 楼答案

    如果您想要维护scope="step"并且想要行计数,请不要使用RowMapper{}属性,而是让myVO对象实现^{}并将设置当前项目编号的责任委托给SB