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"
的时候,有什么方法可以解决这个问题
# 1 楼答案
Scope=“step”的含义是,它为执行的每个步骤创建一个实例,这意味着您将为每个线程创建一个新实例
因此,应该发生的是,一旦定义了“步骤”范围,映射行就会被处理器的新实例调用,并且它的起始值为0。当您说在删除步骤范围时它工作正常时,会进一步指出这一点
因此,您可以做的是,保持一个静态原子整数(线程安全)并依赖于该计数器进行逻辑,而不是依赖于行数
如果这样做没有意义,请共享您的配置以进行进一步分析。谢谢
# 2 楼答案
如果您想要维护}属性,而是让} 并将设置当前项目编号的责任委托给SB
scope="step"
并且想要行计数,请不要使用RowMapper
{myVO
对象实现^{