Spring批量项目阅读器从多个数据库中读取

时间:2014-09-04 20:52:11

标签: java spring-batch

我有一个Item对象,如下所示:

class Item{
   private String idProperty;
   private String prop1Db1;
   private String prop2Db1;
   private String prop1Db2;
   private String prop2Db2;

   // getters and setters here
  }

现在,对于给定的idProperty,其中两个属性来自一个数据库,而另外两个属性来自另一个数据库(从属性名称中清楚)。两个数据库中的表都以idProperty作为公共属性。

我可以采取的一种方法是从第一个数据库中读取前三个属性。将不完整的Item传递给Processor并在Processor中触发查询以获取其他两个属性以完成Item,然后再将其传递给Writer

然而,对于大量的记录(数百万)而言,只需要在Processor中触发的查询数量就会产生巨大的性能损失。

有没有办法在Reader本身做到这一点?一个Reader同时从两个数据库中读取以创建Item,然后再将其发送到ProcessorWriter

1 个答案:

答案 0 :(得分:0)

将此答案作为“解决方法”,因为我认为更优雅的解决方案即将来临......
您应该更改读者/处理器/编写器,让他们返回List<Item>而不是单个Item对象;这样,在处理器中,您可以使用处理IN()的SQL Item.idProperty提取List<>来触发单个查询。
根据{{​​1}}的大小,您可以减少已解雇的查询量。