阅读Play Framework文档时,很明显,当使用阻塞的I / O操作或占用大量CPU资源时,应将这些操作放在另一个ExecutionContext上。他们还明确建议在数据库示例中这样做。
但是阅读Slick文档时,他们还说Slick在ExecutionContext上具有查询功能,并且所有操作都是异步的。
问题,可以在默认的ExecutionContext中使用Play Slick吗?
编辑:Scala。
答案 0 :(得分:1)
只需在您可以在应用程序属性文件中配置的小型hicariCP
池中完成所有IO工作即可。仅在DB调用之间进行操作时才需要ExecutionContext
。例如,当您在map
上调用DBIOAction
方法时。来自slick documentation:
如果一个动作取决于序列中的上一个动作,则必须 使用flatMap或地图即时计算它。这两种方法加 过滤器可用于理解操作顺序。 由于它们采用函数参数,因此它们还需要隐式 在其上运行功能的ExecutionContext。这样,Slick可以确保 数据库线程池上没有运行非数据库代码。
因此,使用Play默认ExecutionContext
是安全的,直到您在此方法中未执行任何阻止操作为止。