spring batch itemreader读取多行和动态块大小

时间:2014-09-10 06:04:11

标签: spring spring-batch

有一个案例要处理平面文件中超过3M记录的情况,我们想要一次读取3k记录然后将其处理到编写器,有没有更好的方法来处理它?除此之外,我们还有其他一些条件,因为我们的平面文件格式如下:

userid1,transaction1 userid1,transaction2 userid1,transaction3 userid2,transaction1 userid2,transaction3

一个用户可能有很多事务,项目阅读器会将一个用户的事务读取到不同的线程,我们希望将该用户的所有事务都放在同一个线程中,所以我们要动态更改chunksize,所以还有更好的方法吗?

1 个答案:

答案 0 :(得分:0)

回答你的问题:
是的,您可以使用commit-size步骤更改scope,使用#{}语法替换属性或声明自定义completion-policy

但我认为您不需要更改commit-size,而是实现一个自定义阅读器,它构建一个包含单个用户所有事务的域对象。

class UserTransaction {
  String transactionId;
}
class UserWithTransaction {
  String user;
  List<UserTransaction> transactions;
}

class UserWithTransactionReader implements ItemReader<UserWithTransaction> {...}

网络上有很多自定义阅读器实现(在此处为SO),可以从CSV文件构建复杂对象(如herehere