此版本仍在开发中,尚不被认为是稳定的。对于最新的稳定版本,请使用 Spring Data Commons 3.5.3spring-doc.cadn.net.cn

协程

Kotlin 协程是可挂起计算的实例,允许强制编写非阻塞代码。 在语言方面,suspendfunctions 为异步作提供了抽象,而在库端,kotlinx.coroutines 提供了类似的函数async { }以及像Flow.spring-doc.cadn.net.cn

Spring Data 模块在以下范围内为协程提供支持:spring-doc.cadn.net.cn

依赖

在以下情况下启用协程支持kotlinx-coroutines-core,kotlinx-coroutines-reactivekotlinx-coroutines-reactor依赖项位于类路径中:spring-doc.cadn.net.cn

要在 Maven pom.xml 中添加的依赖项
<dependency>
	<groupId>org.jetbrains.kotlinx</groupId>
	<artifactId>kotlinx-coroutines-core</artifactId>
</dependency>

<dependency>
	<groupId>org.jetbrains.kotlinx</groupId>
	<artifactId>kotlinx-coroutines-reactive</artifactId>
</dependency>

<dependency>
	<groupId>org.jetbrains.kotlinx</groupId>
	<artifactId>kotlinx-coroutines-reactor</artifactId>
</dependency>
支持的版本1.3.0及以上。

Reactive 如何转换为协程?

对于返回值,从 Reactive API 到协程 API 的转换如下:spring-doc.cadn.net.cn

FlowFlux等效于协程世界中,适用于热流或冷流、有限流或无限流,主要区别如下:spring-doc.cadn.net.cn

阅读这篇关于使用 Spring、协程和 Kotlin Flow 进行响应式的博文,了解更多详细信息,包括如何与协程同时运行代码。spring-doc.cadn.net.cn

存储 库

以下是协程存储库的示例:spring-doc.cadn.net.cn

interface CoroutineRepository : CoroutineCrudRepository<User, String> {

    suspend fun findOne(id: String): User

    fun findByFirstname(firstname: String): Flow<User>

    suspend fun findAllByFirstname(id: String): List<User>
}

协程代码库基于响应式代码库构建,以公开通过 Kotlin 协程访问数据的非阻塞性质。 协程存储库上的方法可以由查询方法或自定义实现提供支持。 如果自定义方法为suspend-able 无需实现方法返回响应式类型,例如MonoFlux.spring-doc.cadn.net.cn

请注意,根据方法声明,协程上下文可能可用,也可能不可用。 要保留对上下文的访问权限,请使用suspend或返回启用上下文传播的类型,例如Flow.spring-doc.cadn.net.cn

  • suspend fun findOne(id: String): User:通过挂起同步检索一次数据。spring-doc.cadn.net.cn

  • fun findByFirstname(firstname: String): Flow<User>:检索数据流。 这Flow在获取数据时急切地创建Flow交互 (Flow.collect(…)).spring-doc.cadn.net.cn

  • fun getUser(): User:一旦阻塞线程且没有上下文传播,就检索数据。 应该避免这种情况。spring-doc.cadn.net.cn

协程存储库仅在存储库扩展CoroutineCrudRepository接口。