使用Spring批处理生成非常大的复杂JSON文件
我在Mongo DB中有以下集合中的数据:客户、客户组织、工资单运行和工人。对象之间的关系为客户和员工组织为1:M,客户组织和员工执行为1:M。Worker元素是客户组织下的一个数组 要生成的示例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
"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_执行和工作者数据元素创建一个单独的步骤,后一个步骤追加到同一个文件中。不,不能追加嵌套项。我会尝试在写之前找到一种方法来准备项目,而不是使用多个步骤。我添加了一个答案,我相信它回答了你的问题。请接受或投票:。否则,请让我知道它还需要接受什么。非常感谢。