Kotlin 将Jetbrains公开库与KTor一起使用,并在协同程序内执行数据库事务是否安全?

Kotlin 将Jetbrains公开库与KTor一起使用,并在协同程序内执行数据库事务是否安全?,kotlin,kotlin-coroutines,ktor,kotlin-exposed,Kotlin,Kotlin Coroutines,Ktor,Kotlin Exposed,我是Kotlin的新手,最近开始在Ktor服务器上工作。要执行数据库操作,服务器需要与MySql服务器通信。我开始使用JetBrains公开库来编写数据库操作 我编写了一个挂起函数,以使用事务执行代码块(使用公开的DSL编写的数据库查询)。这是ktor入门指南上的一篇博文 suspend fun <T> dbQuery(block: () -> T): T = withContext(Dispatchers.IO) { transaction { block()

我是Kotlin的新手,最近开始在Ktor服务器上工作。要执行数据库操作,服务器需要与MySql服务器通信。我开始使用JetBrains公开库来编写数据库操作

我编写了一个挂起函数,以使用事务执行代码块(使用公开的DSL编写的数据库查询)。这是ktor入门指南上的一篇博文

suspend fun <T> dbQuery(block: () -> T): T = withContext(Dispatchers.IO) {
        transaction { block() }
    }
由于Exposed使用threadlocal事务管理器以及阻塞JDBC驱动程序,我想知道这样做是否安全

关于如何使用协同路由实际处理mysql连接,没有很好的文档


如果这是错误的,并最终导致事务锁定,那么任何关于如何解决这一问题的指针都会有所帮助

最新版本的Exposed中支持协同程序


请看,但由于Exposed中的协同程序支持仍处于实验模式,文档可能与代码有所不同

IO
dispatcher用于阻塞操作,因此您应该没事。请注意,在
withContext
块中调用的任何函数都不应是可挂起的。如果函数挂起,它可能会在另一个线程中恢复。
dbQuery {
  // my queries
}