9

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

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

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

然后在以下位置添加数据库配置application.conf

brDb = {
  dataSourceClass = org.postgresql.ds.PGSimpleDataSource
  url = "jdbc:postgresql://localhost:5432/test"
  user = "postgres"
  password = "postgres"
  numThreads = 10
}

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

在我的 DAO 对象中,尝试像这样获取数据库连接:

Database.forConfig("brDb")

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

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

然后我尝试将 HikariCP 添加为依赖项build.sbt

libraryDependencies ++= Seq(
    // ...
    "com.zaxxer" % "HikariCP" % "2.3.3",
    // ...
)

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

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

我想我缺少一些配置,但我不确定,也没有找到更多关于它的信息。我应该如何设置配置以使连接池正常工作?

4

2 回答 2

8

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

Java 8 Maven 神器:

<dependency>
  <groupId>com.zaxxer</groupId>
  <artifactId>HikariCP</artifactId>
  <version>2.3.5</version>
  <scope>compile</scope>
</dependency>

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

libraryDependencies ++= Seq(
  "com.zaxxer" % "HikariCP-java6" % "2.3.3",
)
于 2015-03-24T19:43:37.163 回答
4

顺便说一句,我发现您在上面指定的配置结构实际上在 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
}
于 2015-05-22T10:41:23.110 回答