JSON ItemReader 和 ItemWriter

Spring Batch 支援以下格式的 JSON 資源讀寫

[
  {
    "isin": "123",
    "quantity": 1,
    "price": 1.2,
    "customer": "foo"
  },
  {
    "isin": "456",
    "quantity": 2,
    "price": 1.4,
    "customer": "bar"
  }
]

假定 JSON 資源是對應於單個 Item 的 JSON 物件陣列。Spring Batch 不依賴於任何特定的 JSON 庫。

JsonItemReader

JsonItemReader 將 JSON 解析和繫結委託給 org.springframework.batch.item.json.JsonObjectReader 介面的實現。該介面旨在透過流式 API 來分塊讀取 JSON 物件。目前提供了兩種實現:

  • Jackson 透過 org.springframework.batch.item.json.JacksonJsonObjectReader

  • Gson 透過 org.springframework.batch.item.json.GsonJsonObjectReader

要處理 JSON 記錄,需要以下內容:

  • Resource:表示要讀取的 JSON 檔案的 Spring Resource。

  • JsonObjectReader:用於解析 JSON 物件並將其繫結到 Item 的 JSON 物件讀取器

以下示例展示瞭如何定義一個使用前面的 JSON 資源 org/springframework/batch/item/json/trades.json 和基於 Jackson 的 JsonObjectReaderJsonItemReader

@Bean
public JsonItemReader<Trade> jsonItemReader() {
   return new JsonItemReaderBuilder<Trade>()
                 .jsonObjectReader(new JacksonJsonObjectReader<>(Trade.class))
                 .resource(new ClassPathResource("trades.json"))
                 .name("tradeJsonItemReader")
                 .build();
}

JsonFileItemWriter

JsonFileItemWriter 將 Item 的編組委託給 org.springframework.batch.item.json.JsonObjectMarshaller 介面的實現。此介面的約定是接收一個物件並將其編組為 JSON String。目前提供了兩種實現:

  • Jackson 透過 org.springframework.batch.item.json.JacksonJsonObjectMarshaller

  • Gson 透過 org.springframework.batch.item.json.GsonJsonObjectMarshaller

要寫入 JSON 記錄,需要以下內容:

  • Resource:表示要寫入的 JSON 檔案的 Spring Resource

  • JsonObjectMarshaller:用於將物件編組為 JSON 格式的 JSON 物件編組器

以下示例展示瞭如何定義一個 JsonFileItemWriter

@Bean
public JsonFileItemWriter<Trade> jsonFileItemWriter() {
   return new JsonFileItemWriterBuilder<Trade>()
                 .jsonObjectMarshaller(new JacksonJsonObjectMarshaller<>())
                 .resource(new ClassPathResource("trades.json"))
                 .name("tradeJsonFileItemWriter")
                 .build();
}