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
我想我错过了一些配置,但我不确定并且没有找到更多关于它的信息.我应该如何设置配置以使连接池工作?
该错误意味着HikariCP软件包是为比您正在运行的JRE更新的JRE编译的.事实上,如果您查看主页,您会看到您使用的版本是:
Java 8 maven工件:
Run Code Online (Sandbox Code Playgroud)<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",
)
Run Code Online (Sandbox Code Playgroud)
顺便说一句,我发现您上面指定的配置结构实际上在 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)