Как обновить и вставить документ с помощью MongoItemWriter в Spring Batch? - PullRequest
0 голосов
/ 09 декабря 2018

В проекте Spring Batch, включающем чтение и запись в MongoDB, запись в MongoDB с использованием MongoItemWriter настраивается следующим образом:

<batch:job id=“someJob”>
    <batch:step id="step1">
        <batch:tasklet>
            <batch:chunk reader=“reader”
                writer=“writer”
                processor=“processor” commit-interval="10" />
        </batch:tasklet>
    </batch:step>
</batch:job>

Компонент Writer настраивается следующим образом:

<bean id="writer"
    class="org.springframework.batch.item.data.MongoItemWriter">
    <property name="template" ref="mongoTemplate" />
    <property name="collection"
        value="XYZCollection" />
</bean>

Тогда у нас есть модель:

public class Sample {

    @Id
    private ObjectId id;

    @Field(“Field1”)
    private String field1;

    @PersistenceConstructor
    public Sample() { }

    // getter and setters

}

Наконец, из processor возвращается объект класса, модель которого составляет документ MongoDB, так что ItemWriter выберет егодля вставки в базу данных:

public class Processor implements ItemProcessor<Sample, Sample> {

    @Override
    public Sample process(Sample sampleItem) throws Exception {
        Sample updatedSampleItem = updateSampleItem(sampleItem);
        Sample newSampleItem = createSampleItem(sampleItem);
        return newSampleItem;
    }
}

Используемые версии: - подпружиненный сердечник 5.1.3.RELEASE - подпружиненный пакет 4.1.0.RELEASE - spring-data-mongodb 2.1.3.RELEASE

Теперь, это сохраняет newSampleItem в XYZCollection, как и должно.Требуется, чтобы Spring-Batch обновил прочитанное sampleItem, а затем создал новый документ для объекта newSampleItem.Возможно ли это сделать?Если да, то как?

1 Ответ

0 голосов
/ 10 декабря 2018

Вы можете использовать CompositeItemWriter с двумя устройствами записи, один из которых обновляет элемент, а другой - с новым документом:

  • Для вставок вы можете использовать уже имеющийся модуль записи.
  • Для обновлений необходимо создать новый модуль записи, расширяющий MongoItemWriter и переопределяющий doWrite для обновления элемента.Это связано с тем, что MongoItemWriter позволяет удалять или сохранять документ, но не обновлять документ.

Затем использовать обоих авторов в качестве делегатов CompositeItemWriter.

...