Spring批处理适用于多个查询datareader

时间:2015-05-09 10:59:19

标签: java spring-batch

我正在研究一个需要从数据库读取数据并写入JSON文件的模块。通过以下示例,我将尝试说明方案

Department schema has two tables 
 1. States    columns- stateId, stateName, cityCount, debt, 
 2. City   columns- cityId, cityName, stateId, completedProjects, runningProjects

需要为每个州创建单独的JSON文件。 示例JSON- Washington.JSON

{
"StateId": id,
"StateName": name,
"debt": debt,
Cities:[{
"cityId":id,
"cityName":Name,
"completedProjects":completedProjects,
"runningProjects":runningProjects
}]
}

为此,我认为我们需要两个查询来获取结果。一个用于从状态表中获取状态详细信息的记录,另一个用于通过循环遍历状态表的结果集从城市获取记录。

我的经理建议在上面使用Spring Batch。我已经浏览了一些在线提供的文档和示例应用程序。根据我在Spring Batch Item阅读器中的理解,我们需要一次读取所有数据。然后我们需要创建一个rowmapper来映射记录。 Writer可以使用此rowmapper来写入文件。我认为这里不能单一查询来获取状态和城市数据。我需要使用第一个查询中的状态ID来获取第二个查询中的城市。

我的问题是如何阅读项目阅读器中的数据? 另外,我想知道Spring批次是否是当前情况的理想解决方案(考虑到像City这样需要单独查询的内部数据)。
对不起,帖子太长了......我想解释当前的场景

1 个答案:

答案 0 :(得分:0)

  1. 使用基于状态+城市之间的联接的单个基于查询的ItemReader
  2. 使用自定义的CompletionPolicy来打破各国之间的关系;通过这种方式,您将收到一个List<>状态+城市bean其中状态与List<>
  3. 中的每个项目相同
  4. 在您的自定义ItemWriter.write()中创建JSON文件(这应该很简单)
  5. My 2cents