私たちのプロセッサはリストを返します(実質的にはList<List<?>>
を渡します)。ItemWriter
です。ここで、JdbcBatchItemWriter
は、項目instanceof Listを処理するようにプログラムされていないことがわかりました。我々はまた、項目instanceof List
を処理することを観察した。カスタムItemSqlParameterSourceProvider
を書く必要があります。しかし、悲しいことに、それはSqlParameterSource
を返すということです。これは1つのオブジェクトしか扱えず、再びListを扱うことができません。したがって、誰かがJdbcBatchItemWriter
のリストのリストを処理する方法を理解するのを助けることができますか?リストリストにItemWriterを使用
1
A
答えて
6
通常、デザインパターンは次のとおりです。
Reader -> reads something, returns ReadItem
Processor -> ingests ReadItem, returns ProcessedItem
Writer -> ingests List<ProcessedItem>
プロセッサがList<Object>
を返している場合、あなたはList<List<Object>>
を期待するあなたのライターを必要としています。
あなたは次のようになりますItemWriterに代理人としてあなたJdbcBatchItemWriter
をラップすることによってこれを行うことができます:
public class ListUnpackingItemWriter<T> implements ItemWriter<List<T>>, ItemStream, InitializingBean {
private ItemWriter<T> delegate;
@Override
public void write(final List<? extends List<T>> lists) throws Exception {
final List<T> consolidatedList = new ArrayList<>();
for (final List<T> list : lists) {
consolidatedList.addAll(list);
}
delegate.write(consolidatedList);
}
@Override
public void afterPropertiesSet() {
Assert.notNull(delegate, "You must set a delegate!");
}
@Override
public void open(ExecutionContext executionContext) {
if (delegate instanceof ItemStream) {
((ItemStream) delegate).open(executionContext);
}
}
@Override
public void update(ExecutionContext executionContext) {
if (delegate instanceof ItemStream) {
((ItemStream) delegate).update(executionContext);
}
}
@Override
public void close() {
if (delegate instanceof ItemStream) {
((ItemStream) delegate).close();
}
}
public void setDelegate(ItemWriter<T> delegate) {
this.delegate = delegate;
}
}
関連する問題
- 1. バッチマルチスレッドItemWriter
- 2. Androidリストリストのスクロールクリップアイテム
- 3. 変換リストリストにバック[Pythonの]
- 4. リストをFのリストリストにグループ化する
- 5. ItemWriterが行を出力しない
- 6. 奥行きのないリストリスト
- 7. java.lang.IndexOutOfBoundsExceptionリストリストにアクセスするとき
- 8. Pythonのリストリストのforループを照会
- 9. リストリストからDjangoモデルを作成する
- 10. リストリスト内のリストの数をカウントする
- 11. ItemWriterを使用してmysql LOAD DATA INFILEを実行するにはどうすればよいですか?
- 12. android:リストリストでListSelectorが機能しない
- 13. Androidでのリストリストの編集ListView
- 14. Datagrid内のリストリストのプロパティのバインド
- 15. リストリストをAndroidのスピナー選択に基づいて更新する
- 16. ItemWriterでJobParameterとJobExecutionContextを取得する方法は?
- 17. LineCallbackHandlerからItemWriterへのオブジェクトの受け渡し
- 18. リストリストからスパース行列を構築する
- 19. tabBar内のリストリストの周りの余白を取り除く
- 20. リストリスト(Python 2.7.13)から重複リストを選択
- 21. リストリストの文字列をソートする方法は?
- 22. Androidのカウントダウンタイマー - リストリストの値を持つArrayListの再起動タイマー
- 23. は、私がitemReaderとitemWriterの用法を持っていないのに、私のためのバッチ・バッチですか?
- 24. 整数の繰り返しセットのリストリスト生成の効率化
- 25. 春バッチ - ItemWriter - DataIntegrityViolationException - レコードをスキップ - 再試行 - 動作していません
- 26. 春のバッチで、ItemWriterからSkipListenerにパラメータを渡すにはどうすればいいですか?
- 27. SpringバッチジョブでItemWriterターゲットファイル名を変更するにはどうすればよいですか?
- 28. Androidリストリストの表示が重なって向きが変化する
- 29. JSR 352のItemWriterインターフェイスにcheckpointInfoがあるのはなぜですか?どのサンプル実装ですか?
- 30. 反応仮想化リストリストに1つの項目がある場合でもスクロールバーが表示される
優れたソリューションを提案しました。 http://forum.spring.io/forum/spring-projects/batch/122284-how-to-write-a-list-of-items-with-a-itemwriterを実装することで、より複雑な作業を計画していました。あなたのソリューションは十分に一般的です。後者では、多くの仕事が必要になります。それをテストすることも煩雑になるだろう。 – chatanyday
コードの書式は非常に良好ですが、テンプレートを用意していますか? – Serge
リストを作成してライターを一度実行するほうが効率的かもしれません。 – Serge