Play 中缺少 DatabaseExecutionContext API

DatabaseExecutionContext is missing from the Play API

我遵循提供的数据库处方 here。但是,class DatabaseExecutionContext 在剧中几乎找不到 API,因此,我无法导入它。

我错过了什么?

在此处查看示例代码:https://github.com/playframework/play-samples/blob/2.8.x/play-scala-anorm-example/app/models/DatabaseExecutionContext.scala

import javax.inject._

import akka.actor.ActorSystem
import play.api.libs.concurrent.CustomExecutionContext

@Singleton
class DatabaseExecutionContext @Inject()(system: ActorSystem) extends CustomExecutionContext(system, "database.dispatcher")

您需要按照文档所示配置此上下文:https://www.playframework.com/documentation/2.8.x/AccessingAnSQLDatabase#Using-a-CustomExecutionContext

虽然您已经有了答案,但我建议改用基本特征,例如:

import javax.inject.{Inject, Singleton}

import akka.actor.ActorSystem
import play.api.libs.concurrent.CustomExecutionContext

import scala.concurrent.ExecutionContext

trait DatabaseExecutionContext extends ExecutionContext

@Singleton
class DatabaseAkkaExecutionContext @Inject()(system: ActorSystem)
    extends CustomExecutionContext(system, "database.dispatcher")
    with DatabaseExecutionContext

原因是如果你不这样做,你需要在测试需要这个执行上下文的操作时带上 akka,有了这个特性,你应该能够为你的测试编写一个简单的执行程序,比如:

  implicit val globalEC: ExecutionContext = scala.concurrent.ExecutionContext.global

  implicit val databaseEC: DatabaseExecutionContext = new DatabaseExecutionContext {
    override def execute(runnable: Runnable): Unit = globalEC.execute(runnable)

    override def reportFailure(cause: Throwable): Unit = globalEC.reportFailure(cause)
  }

编辑:我已经创建了一个详细的post解释这个。