【发布时间】:2014-05-05 16:05:04
【问题描述】:
我正在尝试了解 play 的执行上下文,以及它究竟如何适合我使用 play 和 google guice 的方式。
我正在构建的典型控件如下所示:
@Singleton
class MyController @Inject()(myService: MyService) extends Controller {
def show(id: Int) = Action {
val m = myService.getMy(id)
Ok("this is my name " + m.name
}
}
MyService 正在扩展一个创建 apache tomcat jdbc 线程池的特征,例如:
trait BaseService {
val ds = LoadApacheJdbcPool.datasource
val db = Database.forDataSource(ds)
}
现在据我了解,这将按照以下方式加载到默认执行上下文中: http://www.playframework.com/documentation/2.1.0/ThreadPools
play {
akka {
event-handlers = ["akka.event.slf4j.Slf4jEventHandler"]
loglevel = WARNING
actor {
default-dispatcher = {
fork-join-executor {
parallelism-factor = 1.0
parallelism-max = 24
}
}
}
}
}
那么这是什么意思,在默认设置下(上图),这是否意味着最多会创建 24 个线程?
对我来说真正的问题是取决于发生了什么,我如何让我的注入服务在它自己的执行上下文中创建一个 jdbc 池(可能有也可能没有很多线程)而不是默认的开吗?
我读到我可以在将来包装我的调用并显式传递一个执行上下文,但那是针对我的“MyService”上的调用,但它已经被注入并已经创建了 jdbc 池。
【问题讨论】:
标签: scala playframework guice slick