目前,我正在为我的项目开发一个 springboot webflux 应用程序,在那里我使用reactive-mongo-template 和其他reactive 实现。现在我有一个由 WebMvc 实现的传统 spring boot 应用程序(这里我不使用真正的 springboot 应用程序。只使用使用 mongoDB 配置实现的核心服务)并且它使用(正常)mongo-template 来实现其实现的服务。在我的 webflux 应用程序中,我尝试使用旧应用程序中定义的旧服务。
为此,我尝试使用组件扫描 ( com.a.b.cservice.core.configuration
)导入旧版应用程序,但出现了一些错误。问题是它不会正确检测应用程序和非反应式 mongo 模板。
弹簧是否仅支持 1 个 mongo 连接?这些是我得到的错误日志;
[main] WARN o.s.b.w.r.c.AnnotationConfigReactiveWebServerApplicationContext - [] - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'mapperDAOSpringConfigurations': Unsatisfied dependency expressed through field 'mongoTemplate'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'mongoTemplate' defined in class path resource
[com/a/b/cservice/core/configuration/MongoConfigurations.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.data.mongodb.core.MongoTemplate]: Factory method 'mongoTemplate' threw exception; nested exception is java.lang.NoSuchMethodError: com.mongodb.connection.ClusterSettings.getDescription()Ljava/lang/String;
***************************
APPLICATION FAILED TO START
***************************
Description:
An attempt was made to call a method that does not exist. The attempt was made from the following location:
com.mongodb.connection.DefaultClusterFactory.createCluster(DefaultClusterFactory.java:182)
The following method did not exist:
com.mongodb.connection.ClusterSettings.getDescription()Ljava/lang/String;
The method's class, com.mongodb.connection.ClusterSettings, is available from the following locations:
jar:file:/C:/Users/abc/.m2/repository/org/mongodb/mongodb-driver-core/4.0.5/mongodb-driver-core-4.0.5.jar!/com/mongodb/connection/ClusterSettings.class
jar:file:/C:/Users/abc/.m2/repository/org/mongodb/mongo-java-driver/3.12.7/mongo-java-driver-3.12.7.jar!/com/mongodb/connection/ClusterSettings.class
The class hierarchy was loaded from the following locations:
com.mongodb.connection.ClusterSettings: file:/C:/Users/abc/.m2/repository/org/mongodb/mongodb-driver-core/4.0.5/mongodb-driver-core-4.0.5.jar
Action:
Correct the classpath of your application so that it contains a single, compatible version of com.mongodb.connection.ClusterSettings
是否有任何解决方法可以使用带有 mongoDb 的 webflux 应用程序处理旧应用程序?或者我是否需要将其保留为单独的微服务并调用相关端点?
经过一些工作和搜索,我发现问题与 Webflux 无关。纯粹是遗留应用程序和 webflux 驱动程序之间的 mongo 客户端冲突。所以我从旧版中排除了驱动程序,并将其spring-boot-starter-data-mongodb
与反应式spring-boot-starter-data-mongodb-reactive
版本一起导入。(两者都使用相同的版本 2.3.5.RELEASE)。
ps:在这里发现了同样的问题Spring boot 2.0.5.RELEASE and mongo 4.0 connection issues
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句