Kotlin 将Jetbrains公开库与KTor一起使用,并在协同程序内执行数据库事务是否安全?
我是Kotlin的新手,最近开始在Ktor服务器上工作。要执行数据库操作,服务器需要与MySql服务器通信。我开始使用JetBrains公开库来编写数据库操作 我编写了一个挂起函数,以使用事务执行代码块(使用公开的DSL编写的数据库查询)。这是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()
suspend fun <T> dbQuery(block: () -> T): T = withContext(Dispatchers.IO) {
transaction { block() }
}
由于Exposed使用threadlocal事务管理器以及阻塞JDBC驱动程序,我想知道这样做是否安全
关于如何使用协同路由实际处理mysql连接,没有很好的文档
如果这是错误的,并最终导致事务锁定,那么任何关于如何解决这一问题的指针都会有所帮助 最新版本的Exposed中支持协同程序
请看,但由于Exposed中的协同程序支持仍处于实验模式,文档可能与代码有所不同
IO
dispatcher用于阻塞操作,因此您应该没事。请注意,在withContext
块中调用的任何函数都不应是可挂起的。如果函数挂起,它可能会在另一个线程中恢复。
dbQuery {
// my queries
}