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.item.json.JsonObjectReader インターフェースの実装に委譲します。このインターフェースは、ストリーミング API を使用して JSON オブジェクトをチャンクで読み取ることで実装することを目的としています。現在、2 つの実装が提供されています。

JSON レコードを処理できるようにするには、次のものが必要です。

  • Resource: 読み取る JSON ファイルを表す Spring リソース。

  • JsonObjectReader: JSON オブジェクトを解析してアイテムにバインドする JSON オブジェクトリーダー

次の例は、以前の JSON リソース org/springframework/batch/item/json/trades.json および Jackson に基づく JsonObjectReader で動作する JsonItemReader を定義する方法を示しています。

@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.item.json.JsonObjectMarshaller インターフェースに委譲します。このインターフェースの規約は、オブジェクトを取得して JSON String にマーシャリングすることです。現在、2 つの実装が提供されています。

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();
}