问题标签 [spring-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 回答
4246 浏览

spring - 反应式 Spring Boot - java.lang.NoSuchFieldError: DEFAULT_SHUTDOWN_QUIET_PERIOD

我正在尝试将旧的 spring 应用程序迁移到 springboot 2.3.1 和 spring 5.2.7。目标是制作一个反应式应用程序。但是我被困在下面。我不完全确定我还需要升级什么。

这是我的 pom 的一部分,其他库是内部库,但我认为不会有任何冲突。

关于我所缺少的任何想法?

0 投票
1 回答
701 浏览

spring - 反应式 Spring Boot:在地图完成之前返回评估

我正在使用响应式 WebClient 构建一个与其他 2 个 API 通信的 API。API2 需要从 API1 获取信息,然后我的服务结合并返回这两个信息。资源:

功能:

我的问题是,返回是在所需的最后一张地图完成之前。我不知何故错过了一些东西。我尝试了不同的方法,例如 then()、thenMany()、thenReturn() 在不同的位置。有没有办法做到这一点?如果有一个可能已经完成的简单示例,那也会有所帮助!

0 投票
2 回答
1537 浏览

java - 使用 spring SecurityWebFilterChain 如何禁用/阻止除少数已知路径外的所有非 https 请求

我在 Spring Boot Webflux 应用程序中使用 Spring 安全性主要在HTTPS端口上提供流量。但是,作为一项操作要求,我需要在我的 Spring Boot 应用程序中支持几个非安全的 REST API 路径,以进行健康检查等也需要公开HTTP

SecurityWebFilterChain那么,除了使用bean的已知路径之外,如何强制对 HTTPS 的所有请求?

这就是我定义我的SecurityWebFilterChainbean的方式:

这显然不会按预期工作,因为它允许所有请求使用HTTPHTTPS方案,而我希望始终强制执行HTTPS,但路径除外,例如/health.

请建议我需要在上面的代码中进行哪些更改才能完成此操作。

0 投票
2 回答
1148 浏览

java - WebFlux 中映射的正确使用

但是我对这种方法有一个问题,因为 emailService.map(service -> service.findInfoByEmail(dto.getManagerEmail()))返回Mono<Mono<EmailDto>>. 的实现findInfoByEmail(String email)

我的方法返回Mono<EmailDto>,不是Mono<Mono<EmailDto>>。所以,我的问题是:如何转换Mono<Mono<EmailDto>>Mono<EmailDto>?或者 mb 我完全错了,方法应该返回Mono<Mono<EmailDto>>?期待任何帮助。

0 投票
1 回答
122 浏览

mongodb - 如何遍历 findPublisher 并从 mongo 反应集合中获取名称列表?

我有一个名为“Person”的集合,在对这个集合应用响应式 find() 之后,它返回 FindPublisher。如何遍历此集合并获取名称列表。这里的名称是“列名”。人员集合结构:

{“姓名”:“约翰”,“年龄”:18 }

0 投票
5 回答
6636 浏览

java - spring-boot ReactiveClientRegistrationRepository 未找到

环境:Spring Boot 2.3.1、Java 11

我已经尝试了一些东西(也与 spring 的示例应用程序进行了比较),但到目前为止,我在创建WebClient需要ReactiveClientRegistrationRepository.

启动我的 spring-boot 应用程序时出现以下异常:

我理解 spring-boot-autoconfigure 它应该使用的方式ReactiveOAuth2ClientAutoConfiguration,因为在 yml-file 中给出了所需的属性。

遵循一些代码片段,如果缺少某些内容以获取整个上下文,我可以提供更多信息

主班

配置:

安全配置

应用程序.yml

我尝试了不同的依赖项,所以有些可能不需要。实际上需要哪些依赖项?

pom.xml

在集成测试中,Spring-Boot-Application 启动

编辑 1: 调试自动配置的正匹配

在测试它的工作原理:

启动我的 Spring Boot 应用程序时:

编辑2: 按照建议进行更改后,我现在有以下内容:

pom.xml

此外,所有使用过的 spring-projects 版本:

问题依然存在。

0 投票
2 回答
919 浏览

reactive-programming - Spring WebFlux如何合并Mono Objects的结果?

请查看使用 RestTemplate 的控制器(添加评论)的以下代码:

现在我正在尝试使用反应式编程来实现相同的目标。我现在使用来自 Web-Flux 的 WebClient 和 Mono。但是,我很困惑如何组合结果?看看下面的代码(只是使用 Mono Everywhere。其余代码保持不变)

问题 1:我们如何合并所有内容并形成 Mono 对象并将其作为响应发送?

问题2:语句“CourseInfo courseInfo = getCourseInfo(courseid);”是否 导致阻塞操作?

谢谢!

0 投票
1 回答
849 浏览

spring - Spring WebClient POST 到 login.microsoftonline.com 给出 404 错误

我在使用org.springframework.web.reactive.function.client.WebClientKotlin 中的 Spring Reactive WebClient () 使用 Azure AD 实现 Oauth2 时遇到问题,遵循以下文档:https ://docs.microsoft.com/en-us/azure/active-directory/develop/v2-oauth2- client-creds-grant-flow#first-case-access-token-request-with-a-shared-secret

我的组织有自己的租户,但问题也适用于使用https://login.microsoftonline.com/common/oauth2/v2.0/token时。

如果我执行以下 CURL,我会收到我需要参数的预期 400 错误grant_type

curl -d '' https://login.microsoftonline.com/common/oauth2/v2.0/token

这很好,这意味着我从服务中得到了一个正确的错误,我可以继续包含缺少的参数。但是,将 WebClient 用于相同的 uri 我得到 404 错误。

这是我的实现:

这是我得到的堆栈跟踪:

POST在其他交互中使用带有请求的 WebClient 就好了。如果我用 a 替换 WebClient 调用,RestTemplate().postForObject()我会收到预期的 400 错误,但我正在尝试在我的应用程序中一直使用 WebClient。我尝试了类似POST的操作https://postman-echo.com/post,并且得到了合理的响应,因此它似乎特定于 login.microsoftonline.com 端点。

有没有人遇到过这个,并找到了解决方案?

0 投票
1 回答
1490 浏览

java - 在 Spring Reactive 中自定义 ErrorAttributeOptions 的问题

在我的处理程序函数中,我有这个方法

现在,我想处理这个异常,所以我重写AbstractErrorWebExceptionHandler并创建了这个类。

问题是,我的终端中仍然有一个 Stacktrace ......但我只用 message 明确定义了 ErrorAttributeOptions。我当前的 Spring Boot 版本是2.3.1.RELEASE。在以前的版本(2.1.1)我没有这个问题,因为我习惯了这个

现在,在 Spring Boot 的碰撞版本之后发生了这个问题。

0 投票
0 回答
187 浏览

spring-boot - 当第一个等待重试时,如何在发起新的响应调用之前取消 WebClient 响应调用

我正在使用 WebClient 创建调用以将状态更新发送到端点,如下所示:

我正在调用的端点不是 100% 可用的(可能因为网络问题而无法到达它)。这就是我使用retryBackoff.

在下面的场景中

我的问题是如何在时间 1 取消呼叫并在时间 2 发送呼叫。在时间 1,它会因为 retryBackoff 重新尝试重新发送。

我应该保留返回的 Disposable 的引用并在再次调用dispose之前调用它updateStatus吗?取消电话的正确方法是什么?