【问题标题】:updateFirst method not always saving the objectupdateFirst 方法并不总是保存对象
【发布时间】:2019-06-18 19:54:03
【问题描述】:

updateFirst Spring Mongo 模板的方法并不总是按预期更新 mongo Db 集合。

(更新请求是由前端 ui 中的保存按钮触发的,我们看到在按下保存按钮并完成请求后会出现一条 toast 消息,说明表已成功保存)

当几个更新请求一个接一个按顺序触发并且更新之间没有间隙时,在几个请求之后我可以看到数据不再更新但日志中没有错误。

以下是更新数据库的方法。

@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);
}

我已经记录了使用属性文件参数在 Spring Boot 应用程序上向 Mongo Db 触发的查询,并且始终更新正在触发的查询具有正确的值,但是

更新何时生效 -- 在触发更新查询之前,有一条日志消息显示“正在将对象保存到数据库”。

当更新不起作用时 -- 在更新查询被触发后,有一条日志消息显示“正在将对象保存到数据库”,我认为它写入数据库是之前的更新而不是当前的更新更新。

MongoDB 版本 -- 2.6.7

Spring Mongo 模板驱动版本 -- 2.13.3

Spring Boot 版本 -- v1.3.2.RELEASE

如果需要,可以提供更多信息。

【问题讨论】:

    标签: spring mongodb spring-boot mongotemplate


    【解决方案1】:

    我试图深入研究这个问题,并发现当我向 Db 发出更新命令时会出现问题,它们之间没有间隙,这会破坏 MongoDb 处理更新的队列,并且某些更新会被覆盖。

    所以我在调用 updateFirst 方法之前为每个更新请求添加了 500 毫秒的延迟,这解决了现在更新一直保留的问题,即使更新请求非常频繁也有足够的时间来处理更新。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-12
      • 2016-02-19
      • 2019-05-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多