将我们的一项服务升级到 Java 21 和 Spring boot 3.1.5。服务包含嵌入式 Mongo 数据库,并已更新如下。
<dependency>
<groupId>de.flapdoodle.embed</groupId>
<artifactId>de.flapdoodle.embed.mongo.spring30x</artifactId>
<version>4.11.0</version>
<scope>test</scope>
</dependency>
但是,所有单元和集成测试都在本地执行,没有任何问题,但在 gitlab runner 中失败。
我们如何解决这个错误?.
以下是相同的错误消息。
org.springframework.beans.factory.BeanCreationException: Error creating bean with name
'syncClientServerWrapper' defined in class path resource
Caused by: java.lang.RuntimeException: could not start process at
de.flapdoodle.embed.mongo.transitions.MongoServerStarter.result(MongoServerStarter.java:129)
at de.flapdoodle.reverse.TransitionWalker.resolve(TransitionWalker.java:58)
at de.flapdoodle.reverse.TransitionWalker.resolve(TransitionWalker.java:46)
at de.flapdoodle.reverse.TransitionWalker.initState(TransitionWalker.java:180)
... 102 common frames omitted
Caused by: java.io.IOException: Cannot run program
"/root/.embedmongo/fileSets
/4b177cbd88668a95edf49714fa2964a4a940f94feb0f2b0e279810a865d7d313/mongod"
(in directory "/tmp/temp--033a8268-15b0-4a18-b06b-1f5a6901c65f/
workingDir1858686435819966950"): error=2, No such file or directory
at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1170)
at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1089)
at de.flapdoodle.embed.process.runtime.ProcessControl.start(ProcessControl.java:177)
at de.flapdoodle.embed.process.types.RunningProcess.start(RunningProcess.java:76)
at de.flapdoodle.embed.mongo.transitions.MongoServerStarter.result(MongoServerStart
尝试了各种方法来解决此问题,但无法解决此问题。因此我们需要降级到 Java 17。
您用于运行程序的图像可能与嵌入式 mongo 不兼容。就我而言,我使用了 gradle 的 apline 图像,这导致了问题。切换到使用非 apline 图像,即 gradle:jdk-11 能够解决问题。