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 つの実装が提供されています。
Jackson [GitHub] (英語) から
org.springframework.batch.item.json.JacksonJsonObjectReader
Gson [GitHub] (英語) から
org.springframework.batch.item.json.GsonJsonObjectReader
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 つの実装が提供されています。
Jackson [GitHub] (英語) から
org.springframework.batch.item.json.JacksonJsonObjectMarshaller
Gson [GitHub] (英語) から
org.springframework.batch.item.json.GsonJsonObjectMarshaller
JSON レコードを作成できるようにするには、次のものが必要です。
Resource
: 書き込む JSON ファイルを表す SpringResource
JsonObjectMarshaller
: オブジェクトを JSON 形式にマーシャリングする JSON オブジェクトマーシャラー
次の例は、JsonFileItemWriter
を定義する方法を示しています。
@Bean
public JsonFileItemWriter<Trade> jsonFileItemWriter() {
return new JsonFileItemWriterBuilder<Trade>()
.jsonObjectMarshaller(new JacksonJsonObjectMarshaller<>())
.resource(new ClassPathResource("trades.json"))
.name("tradeJsonFileItemWriter")
.build();
}