Reactive Streams
Reactive Streams 是一种用于异步流处理的规范,具有非阻塞式的反压功能。 IntelliJ IDEA 支持基于 Reactive Streams 的以下非阻塞反应式 Java 框架:
对 Reactive 应用程序的支持包括代码补全、检查、快速修复和专用调试模式。
添加 Reactor 支持
通过以下几种方式,您可以将 Reactor 支持添加到项目中:您可以将必要的依赖项添加到 Maven 或 Gradle 项目的构建文件中,或者您可以手动下载 Reactor 库。 对于 Spring Boot 应用程序,IntelliJ IDEA 允许您在创建新项目时添加所需的依赖项。
将 Reactor 添加到 Maven 项目中
对于 Maven 项目,建议您将 Bill of Materials (BOM) 与核心一起导入,因为这样可以确保 Reactor 组件能够很好地协同工作。
在
pom.xml文件中,添加以下依赖项以导入 BOM:<dependencyManagement> <dependencies> <dependency> <groupId>io.projectreactor<groupId> <artifactId>reactor-bom<artifactId> <version>Dysprosium-SR1<version> <type>pom</type> <scope>import<scope> <dependency> <dependencies> <dependencyManagement>将以下依赖项添加到 import Reactor:
<dependencies> <dependency> <groupId>io.projectreactor<groupId> <artifactId>reactor-core<artifactId> <dependency> <dependencies>
将 Reactor 添加到 Gradle(Gradle 5.0 及更高版本)
对于 Gradle 项目,建议您将 材料清单 (BOM)与核心一起导入,因为这确保了 Reactor 组件能够良好协作。
在
build.gradle中,添加以下依赖项:dependencies { // import BOM implementation platform('io.projectreactor:reactor-bom:Dysprosium-SR1') // add dependencies without a version number implementation 'io.projectreactor:reactor-core' }
将 Reactor 添加到 Gradle(Gradle 4.x 及更早版本)
对于 Gradle 项目,建议您将 材料清单 (BOM)与核心一起导入,因为这确保了 Reactor 组件能够良好协作。
之前的 Gradle 版本不支持 BOM,但是您可以使用 Spring gradle-dependency-management 插件将其导入到您的项目中。
通过将以下代码添加到
build.gradle来从 Gradle Plugin Portal 获取插件:plugins { id "io.spring.dependency-management" version "1.0.6.RELEASE" }通过添加以下代码导入 BOM:
dependencyManagement { imports { mavenBom "io.projectreactor:reactor-bom:Dysprosium-SR1" } }添加 Reactor 支持:
dependencies { compile 'io.projectreactor:reactor-core' }
将 Reactor 库添加到项目中
如果您使用原生 IDE 构建器来构建项目,您可以将 Reactor 支持添加为库。
在主菜单中,转到 Ctrl+Alt+Shift+S 或者点击工具栏上的
。
请选择 库 ,点击
,然后选择 来自Maven…。
在打开的对话框中,指定库文件
io.projectreactor:reactor-core:3.1.06.RELEASE并点击 OK。
创建一个新的 Spring Boot 项目并使用 Reactor
启动 IntelliJ IDEA。
如果欢迎屏幕打开,请点击 新建项目。
否则,请转到主菜单的 。
从左侧窗格中选择 Spring Initializr。
点击
输入您想要使用的服务的 URL,或保留默认选项。
为您的项目指定一个名称和位置,并配置项目元数据:选择一种语言、一个构建工具,并指定一个 artifact ID。
从 JDK 列表中选择您想在项目中使用的 JDK。
如果 JDK 已安装在您的计算机上,但未在 IDE 中定义,请选择 添加 JDK 并指定 JDK 主目录的路径。
如果您的计算机上没有必要的 JDK,请选择 下载JDK。
如果您希望在与项目 JDK 版本不同的 Java 版本上构建项目,您可以在这里进行选择。

点击 下一步(N)。
在向导的下一步中,从 依赖项 列表中选择 Spring Reactive Web ,然后点击 创建。

Reactor 调试模式
Reactor 包含用于调试异步代码的程序集时检测工具。 当您启用 Reactor debug mode 时,程序挂起后,您可以更方便地查看堆栈跟踪。 您可以检查帧并理解为什么在 React 应用程序中将特定参数传递给一个方法。
IntelliJ IDEA 知晓 Reactor 调试模式,并在 帧 选项卡的 调试 工具窗口中显示失败操作的追踪记录。 此外,IntelliJ IDEA 可以在不更改代码的情况下启用调试模式,在调试会话运行时进行必要的调用。

默认情况下,Reactor 调试模式已启用。 这在开发、测试和调试过程中很方便,但通常会影响应用程序的性能。
配置 Reactor 调试模式
按 Ctrl+Alt+S 打开设置,然后选择 。
启用 启用 Reactor 调试模式 选项并选择一种调试初始化方法:
Hooks.onOperatorDebug() :此方法会在每个操作符上捕获堆栈跟踪,速度慢且需要大量资源。 请勿在生产环境中使用此方法。 如需更多信息,请参阅 Activating Debug Mode。
ReactorDebugAgent.init() :使用此 Java 代理来调试应用程序中的异常,对运行时影响不大。 如需更多信息,请参阅 生产就绪的全球调试。
此外,如果您想在代理不可用时显示通知,请选择 无法调用ReactorDebugAgent.init() 时通知。
无 :如果您没有启用全局调试并且在代码中使用
checkpoint()操作符进行更细致的调试,请选择此选项。 欲了解更多信息,请参阅 The checkpoint() Alternative。
在调试会话中启用 将Mono/Flux 实例呈现为延迟计算值 选项以 评估 Mono 和 Flux 值。 这将使您能够配置以下参数:
一次提取的 Flux 元素的最大数量 :指定在调试会话中点击
collectList()时,从 Flux 中单次 get 操作检索的最大元素数。超时后停止 Mono/Flux 评估 :等待未来完成的最长时间。
应用更改并关闭对话框。
在调试模式中订阅 Mono 或 Flux
在调试您的反应式应用程序时,您可以通过在调试会话中订阅相应的发布者来评估 Mono 和 Flux 的值。
在返回 Mono 或 Flux 的方法上设置断点。
开始调试会话:点击工具栏上的
或按 Shift+F9。
在打开的 调试 工具窗口中,选择 调试器 选项卡。
如果您有一个 Mono 对象,请点击
get()旁边。 这将使您订阅发布者,并使用toFuture().get()方法获取 Mono 值。如果您有一个 Flux 对象,请点击
collectList()旁边。 这将订阅发布者并使用collectList().toFuture().get()方法获取流元素。 获取的元素数量限制为 100。 一旦显示出前 100 个元素,您可以双击列表末尾以获取更多。 这个限制可以在 中配置。

高级反应堆检查
IntelliJ IDEA 包含 可能在非阻塞上下文中使用阻塞调用 检测代码片段中不应阻塞线程的线程阻塞方法调用的不当之处的检查。 Reactor 支持还增加了一个选项,使 IntelliJ IDEA 能够通过处理 subscribeOn() 和 publishIn() 操作符来本地理解操作符将在哪个线程上执行。

默认情况下,该选项是启用的,如果您想禁用它,请执行以下操作:
按 Ctrl+Alt+S 打开设置,然后选择 。
清除 使用高级分析检测非阻塞作用域 复选框并点击 确定 以应用新设置。
@Blocking 和 @NonBlocking 注解
JetBrains 注释集合 包括 @Blocking 和 @NonBlocking 注释,这些注释可帮助 IntelliJ IDEA 在非阻塞环境中检测阻塞调用,例如 Kotlin 协程或使用 Project Reactor 或 RxJava 的响应式代码。
将 org.jetbrains:annotations 版本 22.0.0 或更高版本添加到您的项目依赖项中。 IntelliJ IDEA 还支持 Micronaut 和 SmallRye Mutiny 中对应的注解。
Reactor 中的后缀补全
IntelliJ IDEA 提供用于使用 Reactor 的项目的后缀代码补全。 后缀补全可以根据您已经输入的内容将已输入的表达式转换为不同的表达式。
在支持 Reactor 的项目中,IDE 可以使用合适的 reactor.core.publisher.Flux 工厂或 reactor.core.publisher.Mono 工厂来包装表达式。

视频教程
以下视频演示了如何在 IntelliJ IDEA 中创建一个可用的 Reactive Spring Boot 应用程序: