首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >封装在Scala未来的JDBC调用

问封装在Scala未来的JDBC调用
EN

Stack Overflow用户
提问于 2019-05-11 17:16:07
回答 1查看 692关注 0票数 7

我正在编写一个,它使用OJDBC连接到Oracle数据库实例。

据我所知,没有异步JDBC API连接到数据库,也没有回调实现,因此必须阻塞进程线程才能完成调用。

我的问题是:拥有Akka HTTP自然允许用Scala处理请求,简单地将数据库调用包装到Scala中是个好主意吗?在等待数据库响应时,底层线程是否处于空闲状态?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-05-11 17:36:24

在等待数据库响应时,底层线程是否处于空闲状态?是的,线程被阻塞,直到JDBC调用结束。这不是件好事,但在阿德巴准备好之前,可能没有更好的选择了。

使用Future来阻止IO (如JDBC调用)是一种常见的模式。不过,有一些事情需要考虑。在github上有一篇很好的关于这个主题的文章。

总结文章中所描述的一些要点:

  • 将阻塞调用封装在blocking块中,如下所示: fetchUser(id: Long):FutureUser =未来{阻塞{//将此操作标记为阻塞.preparedStatement.execute() }
  • 您不应该对执行任何阻塞操作的期货使用scala.concurrent.ExecutionContext.Implicits.global,因为您可能会饥饿线程池。您应该为阻塞操作创建一个单独的线程池: 对象BlockingIOExecutionContext {隐式val ec: ExecutionContextExecutor = ExecutionContext.fromExecutor( Executors.newCachedThreadPool() ) //为我们的阻塞操作创建分离线程池}

最好的选择就是使用一些成熟的Scala框架,为您做这些事情,比如圆滑或杜比。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56092605

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档