问题标签 [spring-data-mongodb-reactive]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
158 浏览

java - 使用@Transactional 在同一个spring事务下调用2个不同的ReactiveMongoRepository

让我们有 2 个不同的ReactiveMongoRepositorymongo 存储库:

还有一个 @Transactional 方法,它调用两个存储库,以反应方式链接它们的调用:

我想要实现的是在同一个事务下执行 2 个存储库调用,这样,例如,如果.delete(...)调用失败,则.save(...)开箱即用地执行先前的回滚。我做了不同的测试,到目前为止我找不到让它工作的方法。

我不知道这是否可能以反应方式进行,只要当执行跳转到平面图块时,它TransactionAspectSupport似乎就丢失了(用调试器检查过)。

你能给我一些关于如何实现这一目标的建议吗?提前致谢

0 投票
1 回答
336 浏览

project-reactor - 尝试管理多个 Flux/Mono,先开始其中一些,然后合并其中一些,然后有点迷失

我有一个接受实体 ID 和“分辨率类型”作为参数的模块,然后(主要)通过返回 Fluxes 的多个操作异步收集数据。解析分为多个(主要是再次)异步操作,每个异步操作都用于收集有助于解析的不同数据类型。我说“主要”是异步的,因为某些解析类型需要一些必须同步进行的初步操作,以便为解析的其余异步 Flux 操作提供信息。现在,当这个同步操作发生时,整个异步解析操作的至少一部分可以开始。我想在同步操作发生时启动这些 Flux 操作。然后,一旦同步数据得到解决,我就可以为正在进行的剩余操作获取每个 Flux。某些分辨率类型将使所有 Flux 操作都返回数据,而另一些则收集较少的信息,并且某些 Flux 操作将保持为空。解析操作非常耗时,我希望能够更早地开始一些 Flux 操作,以便我可以稍微压缩时间——这对于我正在完成的工作非常重要。所以急于订阅是理想的,只要我能保证不会错过任何一个项目发射。而且我希望能够更早地开始一些 Flux 操作,以便我可以稍微压缩时间——这对我正在完成的工作非常重要。所以急于订阅是理想的,只要我能保证不会错过任何一个项目发射。而且我希望能够更早地开始一些 Flux 操作,以便我可以稍微压缩时间——这对我正在完成的工作非常重要。所以急于订阅是理想的,只要我能保证不会错过任何一个项目发射。

考虑到这一点,我该如何:

  1. 为解决所有问题所需的每个 Flux 操作创建一个“持有者”或“容器”,并将它们初始化为空(如Flux.empty()
  2. 将项目添加到我可以在上面的项目 1 中创建的任何内容中——它被初始化为空,但我可能想要来自一个或多个有限和异步 Flux 操作的数据,但我不关心将它们分开,它们可以显示为一个流,当我将使用collectList()它们来生成Mono.
  3. 当其中一些Flux操作应该在其他一些操作之前开始时,我该如何启动它们,并确保我不会错过任何数据?例如,如果我开始一个名称解析 Flux,我可以像上面第 2 项那样添加它吗?假设我想开始检索一些数据,然后执行一个同步操作,然后我从同步操作的结果中创建另一个名称解析 Flux,我能否将这个新的 Flux 附加到原始名称解析 Flux 中,因为它将是返回相同的数据类型?我知道Flux.merge(),但如果可能的话,使用一个我可以继续添加的 Flux 引用会很方便。

我需要一个集合对象,比如一个列表,然后使用合并操作吗?最初,我考虑使用ConnectableFlux, 直到我意识到它是用于连接多个订阅者,而不是用于连接多个发布者。我认为连接多个发布者是我需要的一个很好的答案,除非这是一种可以以更好方式处理的常见模式。

我做响应式编程的时间很短,所以请耐心等待我试图描述我想做的事情的方式。如果我能更好地澄清我的意图,请让我知道我不清楚的地方,我很乐意尝试澄清它。提前感谢您的时间和帮助!

编辑:这是最终的 Kotlin 版本,简洁明了:

和输出:

0 投票
1 回答
113 浏览

java - 如何在 Reactive Spring Data 中使用来自其他对象的引用来获取对象?

  1. 我是 MongoDB 和 WebFlux 的新手。我正在尝试使用此“帖子” POJO 中的“CommentsIds”(列表 idComments)检索带有“评论”(列表 listComments)的“帖子”:

  2. 那是我的 POJO/实体:

  1. 这是我的服务(findPostByIdShowComments + findCommentsByPostId):
  1. 那是我的控制器:
  1. 结果,我无法获取我的“评论”并将它们加载到 POJO 中,因此,我无法在 Rest Response Json 中显示它们。作为“Json 结果”,我得到:

非常感谢你们的帮助。

0 投票
1 回答
624 浏览

java - 您如何测试反应式 mongo 存储库?

我正在尝试findByPhoneNumber在此存储库中测试该方法

ATM,我的测试看起来像这样

当我运行它时,我得到了这个错误

org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'io.freesale.repository.UserRepositoryTest': Unsatisfied dependency expressed through field 'repository'; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'io.freesale.repository.UserRepository' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}

我是春季菜鸟,所以请不要欺负我

0 投票
0 回答
57 浏览

mongodb - Reactive MongoDB Changestream 顺序处理

我正在尝试使用响应式编程处理来自 Mongodb 的变更流。下面是代码片段。它是按顺序处理每个文档的正确方法吗?

0 投票
0 回答
16 浏览

spring - 反应式数据库未使用 application/stream+json 获取最新记录

我正在尝试使用响应式 mongodb 来获取数据流application/stream+json

控制器 :

因此,在插入一些作者后,能够以 500 毫秒的延迟在浏览器上获取数据。但是假设我们已经插入了 100 个作者并调用 findAll 端点,这将需要大约 50 秒才能在浏览器上显示所有作者。如果我再插入几个作者,findAll 不会显示它,尽管它仍在处理现有记录。

当数据流显示在浏览器上时,有什么方法可以从反应式 mongo 存储库中获取最近插入的记录。

0 投票
0 回答
242 浏览

spring - Spring Boot 测试和 Reactive MongoDB 集成测试不回滚

我想对连接到响应式 mongodb 的 spring 应用程序进行集成测试。但经过测试,数据并没有回滚。

蒙戈配置

这是我的示例服务

集成测试

测试运行成功,但数据没有回滚

我在https://docs.spring.io/spring-framework/docs/current/reference/html/testing.html#integration-testing上阅读了 spring 测试文档,它需要 PlatformTransactionManager bean 来测试事务管理。

但是 ReactiveMongoTransactionManager 没有实现。对于 mongodb,只有 MongoTransactionManager。我正在使用 Spring Boot 版本 2.4.4

然后我尝试使用 MongoTransactionManager 的另一个解决方案,但仍然没有工作。

这是我的测试配置

使用 MongoTransacationManager 的新集成测试

控制台日志

ostctransaction.TransactionContext : 开始测试上下文的事务 (1) [DefaultTestContext@36b4091c

org.mongodb.driver.connection : 打开连接 [connectionId{localValue:8, serverValue:211}] 到 localhost:27017

ostctransaction.TransactionContext :回滚事务以进行测试:[DefaultTestContext@36b4091c

org.mongodb.driver.connection :关闭连接 [connectionId{localValue:5, serverValue:208}] 到 localhost:27017

日志说事务是回滚的,但是当我检查数据库时数据没有回滚。

我是不是配置有问题?

0 投票
1 回答
329 浏览

spring-boot - SpringData MongoDB @TypeAlias 升级后停止工作

从 Spring Boot 2.3.1.RELEASE 升级到 Spring Boot 2.5.0(对于 2.4.0+ 也不起作用)后,我试图解决项目问题,@ TypeAlias似乎被忽略了。

我使用 Kotlin 和响应式的方式来实现这一点。我将@ EntityScan@SpringBootApplication@EnableReactiveMongoRepositories的basePackages 设置为com.example.ajax 。

这是我想要实现的示例,它在 2.3.1 中起作用(不要介意结构):

当我使用从存储库中查找(这是自定义的并且基于 reactiveMongoTemplate)时,这个异常弹出窗口:

0 投票
0 回答
45 浏览

spring-data - 我可以忽略 CreatedDate 注释并将其插入 spring data mongodb 吗?

我正在使用@CreatedDatespring data mongodb 的注释插入数据。

一般来说,这非常有用,但我有时想在任意时间插入带有指定 createTime 的数据。

但是,在@CreatedDate存在注释的字段中createTime,我指定的将被忽略,并且正在当前时间插入数据。

@CreatedDate字段上的注解无法移除的情况下,如何将它放在我想要的时间而不是当前时间?

0 投票
0 回答
78 浏览

reactive-programming - 如何链接来自不同服务的响应,以便在 WebFlux 中使用“那些响应”创建 Flux 响应?

关于问题的语境化:

  1. 我正在尝试链接来自多个服务的数据,以便聚合/合并它们的响应;

    1. 我的目标是使用从“合并响应”创建的对象列表创建最终通量。

      1. 合并基于2个服务(userService + postService)

        1. 以下是上述情况的代码:

代码:

问题:

  • 如何完成“userAllDto.setPosts”,
    • 通过获取“PostAllDto”对象创建一个列表,
      • 并将此列表插入“userAllDto.setPosts”?

当前有问题的 JsonResponse(邮递员):

更新:

找到解决方案

解决方案的 JsonResponse(邮递员):

非常感谢您的帮助