Ваш пример не верен. Вы создаете JpaItemWriter
в методе write
, поэтому при каждом вызове write
создается новый экземпляр. Это, вероятно, ваш источник производительности.
Что еще более важно, методы жизненного цикла модуля записи делегата (open / update / close) не будут учитываться (это не относится к JpaItemWriter
, который не реализует ItemStream
, но это будет проблемой, если делегат поток предметов). Ваша реализация MyItemWriter
должна выглядеть примерно так:
public class MyItemWriter implements ItemWriter<List<MyDomainObject>> {
private JpaItemWriter jpaItemWriter;
public MyItemWriter(JpaItemWriter jpaItemWriter) {
this. jpaItemWriter = jpaItemWriter;
}
@Override
public void write(List<? extends Lists<MyDomainObject>> items) {
for(List<MyDomainObject> o : items) {
this. jpaItemWriter.write(o);
}
}
}
Теперь, если вы хотите использовать JdbcBatchItemWriter
для написания списка списков, см. Использование ItemWriter со списком списков .
Редактировать: добавлен пример кода того, как установить делегата в соответствии с запросом в комментариях:
@Bean
public ListUnpackingItemWriter<T> itemWriter() {
JdbcBatchItemWriter<T> jdbcBatchItemWriter = null; // configure your jdbcBatchItemWriter
ListUnpackingItemWriter<T> listUnpackingItemWriter = new ListUnpackingItemWriter<>();
listUnpackingItemWriter.setDelegate(jdbcBatchItemWriter);
return listUnpackingItemWriter;
}