【问题标题】:Guidance on play's execution context and creating my jdbc thread pool关于 play 的执行上下文和创建我的 jdbc 线程池的指南
【发布时间】: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


    【解决方案1】:

    对此不完全确定,但默认调度程序已配置,可以在此处找到: import play.api.libs.concurrent.Execution.Implicits._

    大多数框架通过使用带有implicit 关键字的第二个参数来使用它,因此使用导入的执行上下文。

    Tomcat jdbc 库对此一无所知,所以我猜如果你不自己配置它,它会创建一个具有一些默认值的线程池,并且它与 akka 创建的线程池没有连接。

    所以我猜你需要寻找tomcat的池配置而不是play。

    如果您不介意,我也会尝试查看其他“为 Scala 设计”的用于处理数据库的框架。 我的选择是 slick + 一些像 BoneCP 这样的库

    【讨论】:

    • 我正在使用 slick 但使用 jdbc 池,无论我是否使用 BoneCP,都必须在某些执行上下文中创建池。
    • 如果我错了,请纠正我,但我认为它是管理连接的库,程序员应该只提示线程池的大小。看这里:github.com/wwadge/bonecp/blob/master/bonecp/src/main/java/com/…
    • 有趣的谢谢,它似乎正在创建不同的线程池来保持活动、连接等。但不确定这如何适合 play framework 线程模型。
    • 我会保持原样,现在不要打扰它。考虑演员和未来的执行上下文。然后,如果 DB 有问题,只需更改池的属性。关于执行上下文的配置你可以查看这个链接stackoverflow.com/questions/22787664/…
    猜你喜欢
    • 2011-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-17
    • 1970-01-01
    • 2010-11-30
    • 1970-01-01
    相关资源
    最近更新 更多