Play Framework 2.1 - 找不到隐式 ExecutionContext
Posted
技术标签:
【中文标题】Play Framework 2.1 - 找不到隐式 ExecutionContext【英文标题】:Play Framework 2.1 - Cannot find an implicit ExecutionContext 【发布时间】:2013-02-04 09:11:59 【问题描述】:我正在调用这样的网络服务:
WS
.url(url)
.get
.map response => // error occurs on this line
response.status match
case 200 => Right(response.json)
case status => Left(s"Problem accessing api, status '$status'")
完整错误:Error: Cannot find an implicit ExecutionContext, either require one yourself or import ExecutionContext.Implicits.global
【问题讨论】:
【参考方案1】:根据this issue,它已在文档中修复。我需要添加以下导入:
import play.api.libs.concurrent.Execution.Implicits._
【讨论】:
关于执行上下文。有些人认为它与 Scala 全局上下文是一回事。然而事实并非如此。 Execution.scala 指向 Invoker.scala 所以它实际上是 Play 演员系统的执行上下文。这允许您使用 application.conf 更改行为 “此问题”链接现已损坏。 web.archive 上有一个存档:web.archive.org/web/20140222113140/http://… @EdgeCaseBerg 谢谢,我已经调整了链接 链接再次断开 @dlite922 感谢您的报告。可惜互联网没有永久链接。【参考方案2】:从 Play 2.6 开始,建议对 execution context
使用 guice 依赖注入。
默认执行上下文注入:
Foo.scala
class Foo @Inject()()(implicit ec:ExecutionContext)
def bar() =
WS.url(url)
.get
.map response => // error occurs on this line
response.status match
case 200 => Right(response.json)
case status => Left(s"Problem accessing api, status '$status'")
自定义执行上下文注入:
application.conf
# db connections = ((physical_core_count * 2) + effective_spindle_count)
fixedConnectionPool = 9
database.dispatcher
executor = "thread-pool-executor"
throughput = 1
thread-pool-executor
fixed-pool-size = $fixedConnectionPool
DatabaseExecutionContext.scala
@Singleton
class DatabaseExecutionContext @Inject()(system: ActorSystem) extends CustomExecutionContext(system,"database.dispatcher")
Foo.scala
class Foo @Inject()(implicit executionContext: DatabaseExecutionContext ) ...
更多信息请访问:
https://www.playframework.com/documentation/2.6.x/Migration26#play.api.libs.concurrent.Execution-is-deprecated https://www.playframework.com/documentation/2.6.x/Highlights26#CustomExecutionContext-and-Thread-Pool-Sizing
【讨论】:
您的代码没有注入执行上下文。它仍然使用隐式解析来获取执行上下文。 根据 Play 文档(至少 2.6),@mgosk 的答案是标准;见:playframework.com/documentation/2.6.x/… 然而,还有更多。你也可以扩展/定义CustomExecutionContext
。请参阅:playframework.com/documentation/2.6.x/… 和 playframework.com/documentation/2.6.x/…以上是关于Play Framework 2.1 - 找不到隐式 ExecutionContext的主要内容,如果未能解决你的问题,请参考以下文章
Netbeans + Scala + play-framework:找不到 index.html
Play Framework - 我在哪里可以找到发行说明或“新增功能”文档?
在play framework 2.4中,如何访问ssl socket(或ssl client cert)