最新の安定バージョンについては、Spring Batch ドキュメント 6.0.0 を使用してください! |
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.JacksonJsonObjectReaderGson [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.JacksonJsonObjectMarshallerGson [GitHub] (英語) から
org.springframework.batch.item.json.GsonJsonObjectMarshaller
JSON レコードを作成できるようにするには、次のものが必要です。
Resource: 書き込む JSON ファイルを表す SpringResourceJsonObjectMarshaller: オブジェクトを JSON 形式にマーシャリングする JSON オブジェクトマーシャラー
次の例は、JsonFileItemWriter を定義する方法を示しています。
@Bean
public JsonFileItemWriter<Trade> jsonFileItemWriter() {
return new JsonFileItemWriterBuilder<Trade>()
.jsonObjectMarshaller(new JacksonJsonObjectMarshaller<>())
.resource(new ClassPathResource("trades.json"))
.name("tradeJsonFileItemWriter")
.build();
}