如何在 Webflux 应用程序上使用反应式和非反应式 MongoDB 模板

纳米拉007

目前,我正在为我的项目开发一个 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 应用程序处理旧应用程序?或者我是否需要将其保留为单独的微服务并调用相关端点?

纳米拉007

经过一些工作和搜索,我发现问题与 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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何使WebFilter在非WebFlux /非反应式Spring Boot应用程序中工作?

使用反应式MongoDB模板返回Mono <UpdateResult>

在反应式Spring-Webflux应用中使用Spring AMQP @RabbitListener时如何触发重试

如何使用Spring WebFlux构建反应式内存存储库?

Spring Webflux-如何在WebFilter中调用反应式端点

Meteor如何使用带把手的反应式模板?刷新所有模板?

如何在反应式Spring Data MongoDB中使用数据库引用?

如何使用Django编写反应式Web应用程序?

Spring Framework WebFlux反应式编程

Spring Boot Webflux反应式API

Spring webflux 反应式 Mono::subscribe

在 @KafkaListener 注释方法中使用反应式 webflux 代码

如何在非反应式Spring EventListener和反应式Flux之间架起桥梁

如何在Android上使用反应式扩展程序下载具有进度更新的文件

如何知道表单是反应式表单还是模板驱动表单

使用反应式数据库客户端扩展 Spring WebFlux 应用程序的问题:Maven 依赖项冲突?

如何使用反应式连接值?

如何在基于Spring的反应式应用程序中从身份验证中排除路径?

编写“反应式” WebFlux控制器

用于Webflux反应式API的Spring Cloud Contract

Spring WebFlux反应式WebSocket阻止连接关闭

Spring Security Webflux /反应式异常处理

Micronaut中的反应式mongoDB

使用反应式mongoDB在Micronaut中创建TextIndex

如何在Vue 3的Composition API中的反应式嵌套对象上使用.value?

如何将闪亮的应用程序中的反应式输入值插入MySQL数据库?

@PreAuthorize如何在反应式应用程序中工作,或者如何在没有ThreadLocal的情况下生存?

如何以反应式编程的方式思考,将传统的oops应用转化为反应式应用

如何进行顺序和条件反应式编程?