2014-09-04 53 views
0

我有一个Item对象如下:Spring Batch的项目读者从多个数据库中读取数据

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本身做到这一点? A Reader从两个数据库中同时读取以创建Item,然后将其发送到ProcessorWriter之前?

+0

可能的重复http://stackoverflow.com/questions/21304364/spring-batch-job-read-from-multiple-database – 2014-09-05 05:54:37

+0

@KarthikPrasad:不,它不是重复的。你链接的问题从两个数据库中读取相同类型的记录,比如一个Book对象。而在我的情况下,单个Book对象的属性分为两个数据库。 – Nik 2014-09-05 12:41:23

回答

0

把这个答案为“处理方法”,因为我觉得更优雅的解决方案是指日可待......
你应该改变你的读者/处理器/作家让他们返回List<Item>而不是单个Item对象;以这种方式在处理器中,您可以使用SQL IN()从处理List<>中提取Item.idProperty来触发单个查询。
根据List<>的大小,您可以减少触发查询的数量。