JSON 项目读取器与写入器
Spring Batch 提供了对以下格式的 JSON 资源进行读取和写入的支持:
[
{
"isin": "123",
"quantity": 1,
"price": 1.2,
"customer": "foo"
},
{
"isin": "456",
"quantity": 2,
"price": 1.4,
"customer": "bar"
}
]
假设JSON资源是一个对应单个条目的JSON对象数组。Spring Batch 不绑定于任何特定的JSON库。
JsonItemReader
JsonItemReader 将 JSON 解析和绑定委托给 org.springframework.batch.infrastructure.item.json.JsonObjectReader 接口的实现。该接口旨在通过使用流式 API 来分块读取 JSON 对象。目前提供了两种实现:
要处理 JSON 记录,需要满足以下条件:
-
Resource:一个 Spring Resource,代表要读取的 JSON 文件。 -
JsonObjectReader:一个 JSON 对象读取器,用于解析 JSON 对象并将其绑定到数据项
以下示例展示了如何定义一个 JsonItemReader,该读取器与之前的 JSON 资源 org/springframework/batch/infrastructure/item/json/trades.json 以及基于 Jackson 的 JsonObjectReader 配合使用:
@Bean
public JsonItemReader<Trade> jsonItemReader() {
return new JsonItemReaderBuilder<Trade>()
.jsonObjectReader(new JacksonJsonObjectReader<>(Trade.class))
.resource(new ClassPathResource("trades.json"))
.name("tradeJsonItemReader")
.build();
}
JsonFileItemWriter
JsonFileItemWriter 将项目的编组委托给 org.springframework.batch.infrastructure.item.json.JsonObjectMarshaller 接口。该接口的约定是接收一个对象并将其编组为 JSON String。目前提供了两种实现:
要写入 JSON 记录,需要满足以下条件:
-
Resource: 一个 SpringResource,代表要写入的 JSON 文件 -
JsonObjectMarshaller: 一个 JSON 对象编组器,用于将对象编组为 JSON 格式
以下示例展示了如何定义 JsonFileItemWriter:
@Bean
public JsonFileItemWriter<Trade> jsonFileItemWriter() {
return new JsonFileItemWriterBuilder<Trade>()
.jsonObjectMarshaller(new JacksonJsonObjectMarshaller<>())
.resource(new ClassPathResource("trades.json"))
.name("tradeJsonFileItemWriter")
.build();
}