Spring Boot Kotlin和Spring -流动与暂停

j5fpnvbx  于 2022-11-05  发布在  Spring
关注(0)|答案(1)|浏览(166)

我对Kotlin是全新的,来自Java Spring世界。我希望在Kotlin中复制Java功能,即每个请求的正常线程模型。查看下面的Kotlin示例,我发现其中一个方法默认为flow,而其他方法则指定为suspend。我已经阅读了文档,但仍然有点困惑。我有几个问题需要检查我的理解:

  • 在Kotlin中强制每个请求一个线程模型有什么好的理由吗?
  • 要强制每个请求一个线程模型,所有函数是否都需要是suspend类型?
  • 如果我遵循典型的spring范例 *,那么我是否应该关注用类型流标记所有函数?
  • 不包括服务类中的状态
@RestController
class UserController(private val userRepository: UserRepository) {

    @GetMapping("/")
    fun findAll(): Flow<User> =
        userRepository.findAll()

    @GetMapping("/{id}")
  **suspend**fun findOne(@PathVariable id: String): User? =
        userRepository.findOne(id) ?:
            throw CustomException("This user does not exist")

    @PostMapping("/")
  **suspend**fun save(user: User) =
        userRepository.save(user)
}
vsmadaxz

vsmadaxz1#

在Kotlin中强制每个请求一个线程模型有什么好的理由吗?
没有理由不这样做,而且通常更容易。
要强制每个请求一个线程模型,所有函数是否都需要是suspend类型?
不需要。你可以从挂起函数中调用普通函数,而且很可能会这样做。只是不要阻塞。
如果我遵循典型的spring范例 *,那么我是否应该关注用类型流标记所有函数?
通常,只有当函数实际上执行异步操作(如进行RPC)时,才应将其标记为suspend。

相关问题