Play 中缺少 DatabaseExecutionContext API
DatabaseExecutionContext is missing from the Play API
我遵循提供的数据库处方 here。但是,class DatabaseExecutionContext 在剧中几乎找不到 API,因此,我无法导入它。
我错过了什么?
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解释这个。
我遵循提供的数据库处方 here。但是,class DatabaseExecutionContext 在剧中几乎找不到 API,因此,我无法导入它。
我错过了什么?
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解释这个。