首页 > 解决方案 > 从 Spring Boot 2.2.x 升级到 2.3x 的 MongoDB 问题

问题描述

我在升级我的 spring-boot/mongodb-driver 时遇到了一个非常令人困惑的问题。作为数据库,我们正在运行一个 mongodb:4.0 实例。

在我有之前

Spring Boot 2.2.8
"mongo-java-driver|async|mongo-java-driver-reactivestreams", version: "3.11.2|1.12.0"

现在切换到

Spring Boot 2.3.4
"mongo-java-driver|reactive-streams", version: "4.0.5"

在我们的 ci-test-pipeline 中,使用具有相同图像的 mongodb-testcontainer 一切都很好。同样,从我的 IDE 与正在运行的应用程序连接到我们的数据库也没有问题。

但是:在我们的测试系统上,有时它会像往常一样快速启动,有时它需要 3-6 倍的时间才能启动,有时它会在 10 分钟后启动。在我们的“更大的测试系统”上,升级后我从未达到“启动后”的阶段(这可能暗示它可能取决于数据的大小?)。

当我查看 Mongo 日志时,我看不到任何已执行的查询或请求的索引构建,这可能会延长启动时间。我只意识到一些行为发生了变化,例如计数查询转变为现在的聚合(但是手动执行的这个查询也很快)。

在我的应用程序中,唯一出现的是这样的日志

org.mongodb.driver.protocol.command      : Sending command '{"ismaster": 1, "$db": "admin"}' with request id 203 to database admin on connection [connectionId{localValue:3, serverValue:107164}] to server XXX
org.mongodb.driver.protocol.command      : Execution of command with request id 203 completed successfully in 1.15 ms on connection [connectionId{localValue:3, serverValue:107164}] to server XXX
org.mongodb.driver.cluster               : Updating cluster description to  {type=STANDALONE, servers=[{address=XXX, type=STANDALONE, roundTripTime=1.7 ms, state=CONNECTED}]
org.mongodb.driver.cluster               : Checking status of XXX

我真的不知道在哪里进一步调试,因为在我的本地机器上一切正常,而且我还可以看到数据是在启动时从数据库传输的,所以找到它原则上的数据库没有问题。

编辑:全新结帐后,我也面临本地项目的相同结果,因此似乎必须有一些尚未清除的缓存内容,这确实有助于跳过该连接问题。

标签: mongodbspring-bootspring-data-mongodb

解决方案


不知何故,升级后, MongoCollectionImpl.doCount(..) 不会在启动前交付结果,只是空闲主线程。我设法跳过我的计算并稍后在某个地方进行,现在它可以工作了。


推荐阅读