使用Spring批处理生成非常大的复杂JSON文件

使用Spring批处理生成非常大的复杂JSON文件,json,spring-batch,Json,Spring Batch,我在Mongo DB中有以下集合中的数据:客户、客户组织、工资单运行和工人。对象之间的关系为客户和员工组织为1:M,客户组织和员工执行为1:M。Worker元素是客户组织下的一个数组 要生成的示例JSON如下所示: "Client": { "name":"", "ID":"", // other fields omitted for brevity "Client_Organ

我在Mongo DB中有以下集合中的数据:客户、客户组织、工资单运行和工人。对象之间的关系为客户和员工组织为1:M客户组织和员工执行为1:MWorker元素是客户组织下的一个数组

要生成的示例JSON如下所示:

"Client": {
  "name":"",
  "ID":"", // other fields omitted for brevity
  "Client_Organization": [{
    "ID":"",
    "name":"",
    "address":"",
    "Payroll_Execution": [{
       "ID":"",
       "date":"" // other fields
        }] // end of Payroll_Execution
    "worker": [{
        // several nested JSON elements
        "ID":"",
        "payStubDetails": {
            },
        "dependents": [{
            }],
        "benefits": {
            }
    }]
    }] // end Client_Org 
} // end of Client
对于大型客户机,辅助阵列中的元素数可能高达300K。我正在评估SpringBatch是否能够生成这样一个JSON文件。如何在Worker数组元素上应用基于块的处理,以避免内存溢出


根据我的理解,如果我加入集合中的数据,那么我将只处理1个客户端的数据,提交间隔将处理传递给编写器的JSON对象的根元素(,即client)。使用Spring批处理解决此用例的其他方法有哪些?

JsonFileItemWriter生成具有以下格式的json文件:

[
   {jsonObject1},
   {jsonObject2},
   ...
   {jsonObjectN}
]

将使用
JsonObjectMarshaller
将项目编组为json(Spring Batch提供了基于Jackson和Gson的现成编组程序)。因此,如果计划使用此编写器,则需要确保项目对应于输出文件中的“根”json对象。在您的情况下,如果项目是
客户机
实例,则需要进行连接以准备项目,其中包含需要作为根json对象一部分进行封送的所有详细信息。

感谢Mahmoud提供的宝贵信息。我想问“当在单个批处理作业步骤中写入嵌套的JSON元素时,JsonFileItemWriter是否会遵守append标志?”即,我为Pay_执行和工作者数据元素创建一个单独的步骤,后一个步骤追加到同一个文件中。不,不能追加嵌套项。我会尝试在写之前找到一种方法来准备项目,而不是使用多个步骤。我添加了一个答案,我相信它回答了你的问题。请接受或投票:。否则,请让我知道它还需要接受什么。非常感谢。