我可以将Ktor和Exposed混合使用吗?

时间:2017-08-18 15:23:42

标签: asynchronous kotlin nio kotlin-exposed

我正在使用Ktor和Exposed ORM编写服务,这显然不是异步。我来自Python世界,然后使用阻塞ORM和异步IO库是一个罪过,因为它可能会阻止线程中的所有用户。 Kotlin是否适用同样的规则?我创建了一个糟糕的架构吗?

3 个答案:

答案 0 :(得分:5)

Exposed使用线程本地存储来保持事务实例对实现的访问,并避免将其与每个函数调用一起传递。由于transaction DSL功能正在同步执行,并且不释放线程以便ktor可以为其他调用重用,因此将它们一起使用不会有任何问题。

答案 1 :(得分:1)

这是一篇博客文章,展示了如何一起使用它们:

https://ryanharrison.co.uk/2018/04/14/kotlin-ktor-exposed-starter.html

我自己也已经成功地在一个测试项目中这样做了,但是我还没有准备好共享代码。

简而言之,您可以以这样的方式使用Kotlin协程:在线程上进行数据库事务,这样它们就不会阻塞KTOR的请求处理循环。 如果使用正确的协程分派器,那么线程本地事务上下文应该不会有任何问题。

答案 2 :(得分:1)

“已暴露”中有协程支持。

请阅读文档:

https://github.com/JetBrains/Exposed/wiki/Transactions#working-with-coroutines