使用 R2BC Kotlin 协程的数据库事务

DB transaction using R2BC Kotlin coroutine

我在 Spring Webflux 项目中使用 R2bc 和 Kotlin。它工作得很好。但是我有这个方法

@Component
class UserRepository(private val client: DatabaseClient, private val operator: TransactionalOperator) {

    suspend fun updateUser(user: User, value: String): Int {

        client.execute("INSERT INTO log(user_id, activity) VALUES (:user_id, :activity)")
              .bind("activity", user.activity)
              .bind("user_id", user.id)
              .fetch()
              .awaitRowsUpdated()

        return client.execute("UPDATE users SET value = :value WHERE id = :id")
                     .bind("value", value)
                     .bind("id", user.id)
                     .fetch()
                     .awaitRowsUpdated()
}

此方法有效,但我想使用数据库事务。 Kotlin 支持吗

好的,我找到了我将其发布在这里的解决方案,以便其他人可以从中受益。我所要做的就是。

@Component
class UserRepository(private val client: DatabaseClient, private val operator: TransactionalOperator) {

    suspend fun updateUser(user: User, value: String) =

        operator.executeAndAwait {

            client.execute("INSERT INTO log(user_id, activity) VALUES (:user_id, :activity)")
                  .bind("activity", user.activity)
                  .bind("user_id", user.id)
                  .await()

            client.execute("UPDATE users SET value = :value WHERE id = :id")
                  .bind("value", value)
                  .bind("id", user.id)
                  .await()
        }

}