PlaySlick с SecureSocial: запуск ввода-вывода БД в отдельном пуле потоков

У меня есть приложение Play 2.2.1, которое используетPlay-Slick 0.5.0.8 сохранять данные в бэкэнд Postgresql иSecureSocial 2.1.2 обрабатывать авторизацию пользователя.

Поскольку транзакции play-slick блокируются, я создал отдельныйslick-context контекст исполнения в моем/conf/application.conf файл, согласноинструкции, найденные в вики плагина:

play {
  akka {
    actor {
      slick-context = {
        fork-join-executor {
          parallelism-min = 300
          parallelism-max = 300
        }
      }
    }
  }
}

Это позволяет мне создать действие контроллера, которое выполняется в отдельном контексте выполнения и не блокирует потоки в пуле потоков по умолчанию. Например./app/controllers/Application.scala:

Пример первый - Использование DBAction от play-slick:

import play.api.db.slick._
object Application extends Controller{ 

  // this controller Action won't block threads in the default pool since DBAction uses my separate slick-context execution context
  def recipes = DBAction { implicit rs =>
    val recipes  = Query(Recipes).list
    Ok(recipes.mkString)
  }

}

Для определенных действий контроллера я хочу иметь возможность использовать действия SecureSocial (SecuredAction, UserAwareAction и т.д.) в сочетании с Play-Slick'sDBAction, Каков наилучший способ объединить два?

Я понимаю, что могу сделать что-то вроде ниже, но я понимаю, что вызов БД не будет использовать мой отдельныйslick-context и поэтому заблокирует пул потоков по умолчанию:

Пример второй - использование действия SecureSocial:

import play.api.db.slick._
import securesocial.core._
object Application extends Controller{ 

  // changing from a DBAction to a SecuredAction so that I can use SS's goodies
  def recipes = SecuredAction { implicit request =>
    val recipes  =  DB.withSession { implicit session:Session => Query(Recipes).list } // i'm guessing this WILL BLOCK the default thread pool since it isn't using my separate slick-context execution context??
    Ok(recipes.mkString)
  }

}

Правильно ли я предполагаю, что в примере два будет использоваться / блокировать пул потоков по умолчанию вместо моего отдельногоslick-context пул потоков? Если так, есть ли способ изменить это?

Я мог бы обойти это,увеличение пула потоков Play по умолчанию (default-dispatcher), но в идеале я хочу, чтобы пул потоков по умолчанию был достаточно экономным, и запускать все блокирующие вызовы БД в отдельном пуле.

Помощь приветствуется!

Ответы на вопрос(1)

Ваш ответ на вопрос