如何在Typesafe conf上为Slick 3.0.0 RC1配置HikariCP

Gui*_*rez 9 postgresql scala hikaricp playframework-2.3 slick-3.0

我有一个基于play-scala Typesafe模板(Play Scala Seed)的Play应用程序,并尝试将Slick 3.0.0添加到项目中并连接到PostgreSQL数据库.

首先,我将依赖项添加到build.sbt:

libraryDependencies ++= Seq(
    "com.typesafe.slick" %% "slick" % "3.0.0-RC1",
    "postgresql" % "postgresql" % "9.1-901.jdbc4"
)
Run Code Online (Sandbox Code Playgroud)

然后添加数据库配置application.conf:

brDb = {
  dataSourceClass = org.postgresql.ds.PGSimpleDataSource
  url = "jdbc:postgresql://localhost:5432/test"
  user = "postgres"
  password = "postgres"
  numThreads = 10
}
Run Code Online (Sandbox Code Playgroud)

请注意,我没有明确禁用池,因此它默认启用,并将尝试使用HikariCP,因为从Slick 3.0.0 RC1开始,HikariCP支持存在,默认情况下启用使用它的池.

在我的DAO对象中,尝试获取如下数据库连接:

Database.forConfig("brDb")
Run Code Online (Sandbox Code Playgroud)

当我使用app运行时activator run,我收到此错误:

RuntimeException:java.lang.NoClassDefFoundError:com/zaxxer/hikari/HikariConfig

然后我尝试添加HikariCP作为依赖build.sbt:

libraryDependencies ++= Seq(
    // ...
    "com.zaxxer" % "HikariCP" % "2.3.3",
    // ...
)
Run Code Online (Sandbox Code Playgroud)

清理并重新编译应用程序activator clean compile,并再次运行它,但我收到另一个错误:

RuntimeException:java.lang.UnsupportedClassVersionError:com/zaxxer/hikari/HikariConfig

我想我错过了一些配置,但我不确定并且没有找到更多关于它的信息.我应该如何设置配置以使连接池工作?

Car*_*ten 8

该错误意味着HikariCP软件包是为比您正在运行的JRE更新的JRE编译的.事实上,如果您查看主页,您会看到您使用的版本是:

Java 8 maven工件:

<dependency>
  <groupId>com.zaxxer</groupId>
  <artifactId>HikariCP</artifactId>
  <version>2.3.5</version>
  <scope>compile</scope>
</dependency>
Run Code Online (Sandbox Code Playgroud)

我想你是在Java 7上运行.为此,请将以下内容添加到您的build.sbt:

libraryDependencies ++= Seq(
  "com.zaxxer" % "HikariCP-java6" % "2.3.3",
)
Run Code Online (Sandbox Code Playgroud)


Bog*_*dan 5

顺便说一句,我发现您上面指定的配置结构实际上在 Slick 3.0.0 中不起作用。对我有用的是按照文档http://slick.typesafe.com/doc/3.0.0/database.html#using-typesafe-config中的描述指定数据库配置,否则 Slick 会采用一些默认值配置。我主要谈论“属性”领域。

所以这样的事情应该有效:

mydb = {
  dataSourceClass = "org.postgresql.ds.PGSimpleDataSource"
  properties = {
    serverName = "postgresdb"
    portNumber = "5432"
    databaseName = "mydb"
    user = "myuser"
    password = "secret"
  }
  numThreads = 10
}
Run Code Online (Sandbox Code Playgroud)