我有一个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
,然后再将其发送到Processor
和Writer
?
答案 0 :(得分:0)
将此答案作为“解决方法”,因为我认为更优雅的解决方案即将来临......
您应该更改读者/处理器/编写器,让他们返回List<Item>
而不是单个Item
对象;这样,在处理器中,您可以使用处理IN()
的SQL Item.idProperty
提取List<>
来触发单个查询。
根据{{1}}的大小,您可以减少已解雇的查询量。