【问题标题】:Connection pooling in slick?光滑的连接池?
【发布时间】:2013-03-10 05:02:51
【问题描述】:

有没有一种简单的方法来使用带有 scala 的 Slick 的 DB 连接池?

【问题讨论】:

  • 我的猜测是,如果您在 Play Framework 2.1 中使用它,您将免费获得连接池。 Play Framework 使用 BoneCP 作为其底层库
  • 我不是在问 是否 JVM 世界中有一个池化库。我在询问使用(任何)与 Slick 一起使用的最简单方法。谢谢
  • Slick 需要一个可用的会话。您可以从数据库对象Database.forDataSource(ds: DataSource) 中获取一个。您可以使用数据库对象中的createSessionwithSession 方法。数据源是您从池库中请求的数据源。

标签: scala slick


【解决方案1】:

我为此使用Apache Commons DBCP。基本上,您只需创建一个 DataSource,它封装了池化详细信息,然后将 DataSource 传递给 Slick:

import org.apache.commons.dbcp.BasicDataSource

val dataSource: DataSource = {
  val ds = new BasicDataSource
  ds.setDriverClassName("org.hsqldb.jdbc.JDBCDriver")
  ds.setUsername("SA")
  ds.setPassword("")
  ds.setMaxActive(20);
  ds.setMaxIdle(10);
  ds.setInitialSize(10);
  ds.setValidationQuery("SELECT 1 FROM INFORMATION_SCHEMA.SYSTEM_USERS")
  new java.io.File("target").mkdirs // ensure that folder for database exists
  ds.setUrl("jdbc:hsqldb:file:target/db/db")
  ds
}

// test the data source validity
dataSource.getConnection().close()

// get the Slick database that uses the pooled connection
val database = Database.forDataSource(dataSource)

此示例使用 HSQLDB,但可以轻松适应任何其他数据库。

完整示例为here(您可以克隆项目,然后在lift/ 目录中运行sbt run 以查看它是否正常工作)。

【讨论】:

    【解决方案2】:

    为了完成,我最终写了一篇关于此的博客文章:

    http://fernandezpablo85.github.io/2013/04/07/slick_connection_pooling.html

    【讨论】:

    【解决方案3】:

    【讨论】:

      【解决方案4】:

      似乎更高版本的游戏池配置了连接 - 请参阅http://www.playframework.com/documentation/2.0.1/SettingsJDBC

      【讨论】:

        猜你喜欢
        • 2013-09-03
        • 2016-04-20
        • 1970-01-01
        • 2017-04-23
        • 2013-12-21
        • 1970-01-01
        • 2013-08-20
        • 2021-07-09
        • 1970-01-01
        相关资源
        最近更新 更多