我想知道在 Play 中执行非阻塞 JDBC 查询的最佳(推荐、批准等)方法是什么!使用 Play 的连接池的应用程序(在 Scala 和 PostgreSQL 中,如果重要的话)?我知道 JDBC 本身肯定是阻塞的,但肯定有一些方法可以在单独的线程中进行调用(例如使用 futures 或 actor)以避免阻塞调用线程。
假设我决定将调用包装在 futures 中,我应该使用哪个执行上下文,Play 的默认执行上下文?或者最好创建单独的执行上下文来处理数据库查询?
我知道有一些库可以实现此目的,例如 postgresql-async ,但我真的很想了解其中的机制:)
最佳答案
Suppose I decided to wrap the calls in futures, which execution context should I use, the Play's default one? Or it's better to create separated execution context for handling DB queries?
在这种情况下最好使用单独的执行上下文。这样,提交到默认执行上下文的非阻塞作业(大多数默认 Play 的内容)就不会因提交到同一执行上下文的作业中的阻塞 JDBC 调用而受到干扰。
我建议阅读this (尤其是第二部分)以大致了解如何在不同情况下处理执行上下文(包括阻塞数据库查询的情况),然后引用 this获取有关在 Play 中配置场景的更多详细信息。
关于scala - 在 Play 中以非阻塞方式使用 JDBC 有哪些选项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26177491/