如何解决如何在 Webflux 应用程序上使用反应式和非反应式 MongoDB 模板
目前,我正在为我的项目开发一个 springboot webflux 应用程序,我使用reactive-mongo-template 和其他reactive 实现。现在我有一个由 WebMvc 实现的遗留 spring boot 应用程序(这里我不使用真正的 springboot 应用程序。只使用使用 mongoDB 配置实现的核心服务)并且它使用(正常)mongo-template 来实现其实现的服务。在我的 webflux 应用程序中,我尝试使用旧应用程序中定义的旧服务。
为此,我尝试使用组件扫描 (com.a.b.cservice.core.configuration
) 导入旧版应用程序,但出现了一些错误。问题是它无法正确检测应用程序和非响应式 mongo 模板。
spring 是否只支持 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
发现了同样的问题版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。