如何在 Typesafe conf 上为 Slick 3.0.0 RC1 配置 HikariCP
How to configure HikariCP for Slick 3.0.0 RC1 on Typesafe conf
我有一个基于 play-scala Typesafe template (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"
)
然后在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 support exists and pooling using it is enabled by default。
并且在我的 DAO 对象中,尝试像这样获取数据库连接:
Database.forConfig("brDb")
当我 运行 应用程序使用 activator run
时,出现此错误:
RuntimeException: java.lang.NoClassDefFoundError:
com/zaxxer/hikari/HikariConfig
然后我尝试在 build.sbt
中添加 HikariCP 作为依赖:
libraryDependencies ++= Seq(
// ...
"com.zaxxer" % "HikariCP" % "2.3.3",
// ...
)
使用 activator clean compile
清理并重新编译了应用程序,然后 运行 再次对其进行了编译,但出现了另一个错误:
RuntimeException: java.lang.UnsupportedClassVersionError: com/zaxxer/hikari/HikariConfig
我想我缺少一些配置,但我不确定也没有找到更多相关信息。我应该如何设置配置才能使连接池正常工作?
该错误意味着 HikariCP 包是为比您 运行 使用的 JRE 更新的 JRE 编译的。事实上,如果你 look at the homepage,你会看到你使用的版本是这样的:
Java 8 maven artifact:
<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",
)
顺便说一句,我发现您上面指定的配置结构在 Slick 3.0.0 中实际上不起作用。对我有用的是按照文档 http://slick.typesafe.com/doc/3.0.0/database.html#using-typesafe-config 中的描述指定数据库配置,否则 Slick 将为配置假定一些默认值。我主要说的是"properties"字段。
所以像这样的东西应该可以工作:
mydb = {
dataSourceClass = "org.postgresql.ds.PGSimpleDataSource"
properties = {
serverName = "postgresdb"
portNumber = "5432"
databaseName = "mydb"
user = "myuser"
password = "secret"
}
numThreads = 10
}
我有一个基于 play-scala Typesafe template (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"
)
然后在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 support exists and pooling using it is enabled by default。
并且在我的 DAO 对象中,尝试像这样获取数据库连接:
Database.forConfig("brDb")
当我 运行 应用程序使用 activator run
时,出现此错误:
RuntimeException: java.lang.NoClassDefFoundError: com/zaxxer/hikari/HikariConfig
然后我尝试在 build.sbt
中添加 HikariCP 作为依赖:
libraryDependencies ++= Seq(
// ...
"com.zaxxer" % "HikariCP" % "2.3.3",
// ...
)
使用 activator clean compile
清理并重新编译了应用程序,然后 运行 再次对其进行了编译,但出现了另一个错误:
RuntimeException: java.lang.UnsupportedClassVersionError: com/zaxxer/hikari/HikariConfig
我想我缺少一些配置,但我不确定也没有找到更多相关信息。我应该如何设置配置才能使连接池正常工作?
该错误意味着 HikariCP 包是为比您 运行 使用的 JRE 更新的 JRE 编译的。事实上,如果你 look at the homepage,你会看到你使用的版本是这样的:
Java 8 maven artifact:
<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",
)
顺便说一句,我发现您上面指定的配置结构在 Slick 3.0.0 中实际上不起作用。对我有用的是按照文档 http://slick.typesafe.com/doc/3.0.0/database.html#using-typesafe-config 中的描述指定数据库配置,否则 Slick 将为配置假定一些默认值。我主要说的是"properties"字段。
所以像这样的东西应该可以工作:
mydb = {
dataSourceClass = "org.postgresql.ds.PGSimpleDataSource"
properties = {
serverName = "postgresdb"
portNumber = "5432"
databaseName = "mydb"
user = "myuser"
password = "secret"
}
numThreads = 10
}