Метод updateFirst не всегда сохраняет объект - PullRequest
0 голосов
/ 18 июня 2019

updateFirst метод Spring Mongo Template не всегда обновляет коллекцию mongo Db, как ожидалось.

(запрос на обновление запускается кнопкой сохранения в интерфейсе интерфейса пользователя, мы видим, что появляется всплывающее сообщение о том, что таблица успешно сохранена после нажатия кнопки сохранения и завершения запроса)

Когда несколько запросов на обновление запускаются в последовательном порядке один за другим без промежутка между обновлениями, после нескольких запросов я вижу, что данные больше не обновляются, но в журналах нет ошибок.

Ниже приведен метод обновления базы данных.

@Override
public void updateTable(Source source, Table table) {
    log.debug("updating existing table " + table.getTableId() + " on source " + source.getSourceId());
    source.setStatus(SourceStatus.InProcess);
    Query q = query(where("_id").is(source.getId()).and("deleted").is(false).and("tables._id").is(table.getId()));
    Update u = update("tables.$", table);
    u.set("lastModifiedAt", source.getLastModifiedAt()).set("lastModifiedBy",
            source.getLastModifiedBy()).set("errorInObject", source.isErrorInObject()).set(
            "errorInChildObject", source.isErrorInChildObject()).set("errors", source.getErrors()).set(
            "failedFields", source.getFailedFields()).set("status",source.getStatus());
    template.updateFirst(q, u, Source.class);
}

Я зарегистрировал запросы, запущенные к Mongo Db в приложении весенней загрузки, используя параметр файла свойств, и всегда обновляемый запрос, который запускается, имеет правильные значения, но

при работающем обновлении - В журнале появляется сообщение «Сохранение объекта в базе данных» непосредственно перед выполнением запроса на обновление.

когда обновление не работает - есть сообщение в журнале, которое говорит «Сохранение объекта в базу данных» сразу после запуска запроса на обновление, я думаю, что его запись в БД предыдущее обновление вместо текущего обновления .

Версия MongoDB - 2.6.7

Версия драйвера Spring Mongo Template - 2.13.3

Версия Spring Boot - v1.3.2.RELEASE

Может предоставить дополнительную информацию при необходимости.

1 Ответ

0 голосов
/ 24 июня 2019

Я попытался углубиться в проблему и увидеть, что проблема возникает, когда я запускаю команды обновления для Db без промежутка между ними, что как-то нарушает очередь MongoDb для обработки обновления, а некоторое обновление перезаписывается.

Таким образом, я добавил задержку 500 мс для каждого запроса на обновление перед вызовом метода updateFirst, и это исправило проблему, теперь обновление сохраняется постоянно, даже когда запросы на обновление очень частые, и времени для обработки обновления достаточно..

...