Я использую Play 2.5 с Slick.В документах по этой теме просто говорится, что все управляется модулем Slick and Play Slick.Однако в этом примере печатается Dispatcher[akka.actor.default-dispatcher]
:
class MyDbioImpl @Inject()(protected val dbConfigProvider: DatabaseConfigProvider)(implicit ec: ExecutionContext)
with HasDatabaseConfigProvider[JdbcProfile] {
import profile.api._
def selectSomeStuff(): Future[MyResult] = db.run {
println(ec)
[...]
}
}
Поскольку контекст выполнения печатается внутри db.run, кажется, что весь мой доступ к базе данных также будет выполняться в контексте выполнения по умолчанию.
Я нашел этот ответ на старый вопрос, который в то время решил проблему.Но поскольку это решение устарело, предлагается использовать внедрение зависимостей для получения контекста приложения.Когда я пытаюсь это сделать, я получаю сообщение об ошибке, в котором говорится, что play.akka.actor.slick-context не существует ...
class MyDbioProvider @Inject()(actorSystem: ActorSystem,
protected val dbConfigProvider: DatabaseConfigProvider)
extends Provider[MyDbioImpl] {
override def get(): MyDbioImpl = {
val ec = actorSystem.dispatchers.lookup("play.akka.actor.slick-context")
new MyDbioImpl(dbConfigProvider)(ec)
}
}
Редактировать: Является ли контекст выполнения Slick «нормальным» контекстом выполнения, которыйопределяется в конфигурационном файле где-нибудь?Где происходит переключение контекста?Я предположил, что точка входа в «мир баз данных» находится на db.run
.