反应式流
Reactive Streams是一种具有非阻塞背压的异步流处理规范。IntelliJ IDEA 为以下基于 Reactive Streams 的非阻塞反应式 Java 框架提供支持:
对反应式应用程序的支持包括代码完成、检查、快速修复和专用调试模式。
添加反应堆支持
有多种选项可以为您的项目添加 Reactor 支持:您可以将必要的依赖项添加到 Maven 或 Gradle 项目的构建文件中,也可以手动下载 Reactor 库。对于 Spring Boot 应用程序,IntelliJ IDEA 允许您在创建新项目时添加所需的依赖项。
将 Reactor 添加到 Maven 项目
对于 Maven 项目,建议您将物料清单 (BOM)与核心一起导入,因为它可以确保 Reactor 组件能够很好地协同工作。
在该
pom.xml
文件中,添加以下依赖项以导入 BOM:<dependencyManagement> <依赖关系> <依赖关系> <groupId>io.projectreactor<groupId> <artifactId>reactor-bom<artifactId> <version>Dysprosium-SR1<version> <type>pom</type> <scope>导入<scope > <依赖项> <依赖项> <依赖项管理>添加以下依赖项来导入 Reactor:
<依赖项> <依赖项> <groupId>io.projectreactor<groupId> <artifactId>reactor-core<artifactId> <依赖项> <依赖项>
将 Reactor 添加到 Gradle(Gradle 5.0 及更高版本)
对于 Gradle 项目,建议您将物料清单 (BOM)与核心一起导入,因为它可以确保 Reactor 组件能够很好地协同工作。
在 中
build.gradle
,添加以下依赖项:dependency { // 导入 BOM 实现 platform('io.projectreactor:reactor-bom:Dysprosium-SR1') // 添加不带版本号的依赖实现 'io.projectreactor:reactor-core' }
将 Reactor 添加到 Gradle(Gradle 4.x 及更早版本)
对于 Gradle 项目,建议您将物料清单 (BOM)与核心一起导入,因为它可以确保 Reactor 组件能够很好地协同工作。
以前的 Gradle 版本不支持 BOM,但是,您可以使用 Spring gradle-dependency-management插件将其导入到您的项目中。
通过添加以下代码从 Gradle Plugin Portal 获取插件
build.gradle
:插件{id“io.spring.dependency-management”版本“1.0.6.RELEASE”}通过添加以下代码导入 BOM:
dependencyManagement { 导入 { mavenBom "io.projectreactor:reactor-bom:Dysprosium-SR1" } }添加反应堆支持:
依赖项 { 编译 'io.projectreactor:reactor-core' }
将 Reactor 库添加到项目中
如果您使用本机 IDE 构建器构建项目,则可以将 Reactor 支持添加为库。
转到
Control+Alt+Shift+S或单击工具栏上的 。选择库,单击,然后选择来自 Maven。
在打开的对话框中,指定库工件
io.projectreactor:reactor-core:3.1.06.RELEASE
并单击“确定”。
使用 Reactor 创建一个新的 Spring Boot 项目
启动 IntelliJ IDEA。
如果欢迎屏幕打开,请单击“新建项目”。
否则,请转到
。从左侧窗格中选择Spring Initializr 。
单击以输入您要使用的服务的 URL,或保留默认值。
指定项目的名称和位置并配置项目元数据:选择语言、构建工具并指定工件 ID。
从JDK列表中,选择要在项目中使用的JDK 。
如果您的计算机上安装了 JDK,但未在 IDE 中定义,请选择“添加 JDK”并指定 JDK 主目录的路径。
如果您的计算机上没有必要的 JDK,请选择“下载 JDK”。
点击下一步。
在向导的下一步中,从“依赖项”列表中选择 “Spring Reactive Web”并单击“创建”。
反应堆调试模式
Reactor 包括专为调试异步代码而设计的汇编时检测。当您启用Reactor调试模式时,您可以在程序挂起后更方便地查看堆栈跟踪。您可以检查框架并了解为什么将特定参数传递给响应式应用程序中的方法。
IntelliJ IDEA 能够识别 Reactor 调试模式,并在调试工具窗口的Frame选项卡上显示失败操作的回溯。此外,IntelliJ IDEA 可以启用调试模式,无需对代码进行任何更改,在运行调试会话时进行必要的调用。
默认情况下,Reactor 调试模式处于启用状态。这在开发、测试和调试过程中很方便,但通常会影响应用程序的性能。
配置Reactor调试模式
按Control+Alt+S打开 IDE 设置,然后选择
。启用启用反应堆调试模式选项并选择一种调试初始化方法:
Hooks.onOperatorDebug():此方法捕获每个运算符的堆栈跟踪,该方法速度很慢并且需要大量资源。不要在生产中使用此方法。有关更多信息,请参阅激活调试模式。
ReactorDebugAgent.init():使用此 Java 代理调试应用程序中的异常,而不会对运行时产生太大影响。有关更多信息,请参阅生产就绪全局调试。
如果您想在代理不可用时显示通知,请另外选择“如果无法调用 ReactorDebugAgent.init() 则通知” 。
None:如果您没有启用全局调试,请选择此选项,并
checkpoint()
在代码中使用运算符以获得更细粒度的方法。有关更多信息,请参阅checkpoint() 替代方案。
启用渲染 Mono/Flux 实例作为延迟计算值选项以在调试会话中评估 Mono 和 Flux 值。这将使您能够配置以下参数:
一次获取的 Flux 元素的最大数量:指定在单个获取操作中从 Flux 检索的元素的最大数量(在
collectList()
调试会话中单击时)。超时后停止 Mono/Flux 评估:等待未来完成的最长时间。
单击“应用”保存更改并关闭对话框。
在调试模式下订阅 Mono 或 Flux
在调试反应式应用程序时,您可以通过在调试会话中订阅相应的发布者来评估 Mono 和 Flux 的值。
在返回 Mono 或 Flux 的方法处设置断点。
启动调试会话:单击工具栏上的 或按Shift+F9。
在打开的“调试”工具窗口中,选择“调试器”选项卡。
如果您有 Mono 对象,请单击
get()
它旁边的。这将为您订阅发布者并使用该方法获取 Mono 值toFuture().get()
。如果您有 Flux 对象,请单击
collectList()
它旁边的。这将为您订阅发布者并使用该方法获取流元素collectList().toFuture().get()
。获取的元素数量限制为 100 个。显示前 100 个元素后,您可以双击列表末尾以获取更多元素。 中配置。 。
先进反应堆检查
IntelliJ IDEA在非阻塞上下文检查中包含可能阻塞调用,可检测不应阻塞线程的代码片段中不适当的线程阻塞方法调用。subscribeOn()
Reactor 支持还添加了一个选项,使 IntelliJ IDEA 能够通过处理and运算符在本地了解该运算符将在哪个线程上执行publishIn()
。
该选项默认启用,如果您想禁用它,请执行以下操作:
按Control+Alt+S打开 IDE 设置,然后选择
。清除“使用高级分析来检测非阻塞范围”复选框,然后单击“确定”应用新设置。
@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.core.publisher.Flux
在支持 Reactor 的项目中,IDE 可以用合适的工厂或工厂包装表达式reactor.core.publisher.Mono
。
视频教程
以下视频演示了如何在 IntelliJ IDEA 中创建有效的 Reactive Spring Boot 应用程序: