使用 Postgres 和 HikariCP 设置 Play 2.4.0 会产生配置错误
Setting up Play 2.4.0 with Postgres and HikariCP yields configuration error
我正在尝试设置一个连接到本地 postgres 的播放框架服务器。
我现在的applications.conf
是这样的:
dbplugin=disabled
db {
default {
dataSourceClassName=org.postgresql.ds.PGSimpleDataSource
dataSource {
user="postgres"
password="postgres"
databaseName="timeseries"
serverName="localhost"
}
hikaricp {
connectionTestQuery = "SELECT 1"
}
}
}
我的 build.sbt 只添加了最新的 jdbc for postgres:
lazy val root = (project in file(".")).enablePlugins(PlayJava)
scalaVersion := "2.11.6"
libraryDependencies ++= Seq(
javaJdbc
, cache
, javaWs
, "org.postgresql" % "postgresql" % "9.4.1207.jre7"
)
我收到的错误是
[error] - application -
[info]
[info] ! @6ookeg34l - Internal server error, for (GET) [/] ->
[info]
[info] play.api.UnexpectedException: Unexpected exception[CreationException: Unable to create injector, see the following errors:
[info]
[info] 1) Error in custom provider, Configuration error: Configuration error[Cannot connect to database [default]]
[info] while locating play.api.db.DBApiProvider
[info] while locating play.api.db.DBApi
[info] for parameter 0 at play.db.DefaultDBApi.<init>(DefaultDBApi.java:28)
[info] at play.db.DefaultDBApi.class(DefaultDBApi.java:28)
[info] while locating play.db.DefaultDBApi
[info] while locating play.db.DBApi
[info] for field at play.db.DBModule$NamedDatabaseProvider.dbApi(DBModule.java:61)
[info] while locating play.db.DBModule$NamedDatabaseProvider
[info] at com.google.inject.util.Providers$GuicifiedProviderWithDependencies.initialize(Providers.java:149)
[info] at play.db.DBModule.bindings(DBModule.java:40):
[info] Binding(interface play.db.Database qualified with QualifierInstance(@play.db.NamedDatabase(value=default)) to ProviderTarget(play.db.DBModule$NamedDatabaseProvider@3782a5cb)) (via modules: com.google.inject.util.Modules$OverrideModule -> play.api.inject.guice.GuiceableModuleConversions$$anon)
[info] Caused by: Configuration error: Configuration error[Cannot connect to database [default]]
我发现,我的 play 2.4 不需要 hikari 作为显式依赖项。另外密码和用户名以及数据库名称都是正确的。
除了框架的网站之外,我实际上不知道在哪里可以找到更多信息,而且我已经广泛地检查了这两个网站。很多人似乎都遇到了类似的问题,尽管他们的解决方案对我没有帮助,或者只是我到目前为止的道路上的一步。
找到答案:
您需要使用这种格式:
dataSourceClassName=org.postgresql.ds.PGSimpleDataSource
dataSource.user=postgres
dataSource.password=sdfsdfasd
dataSource.databaseName=timeseries
dataSource.serverName=localhost
hikaricp .connectionTestQuery = "SELECT 1"
也试试:
db.default.hikaricp.dataSourceClassName=org.postgresql.ds.PGSimpleDataSource
db.default.hikaricp.dataSource.user=username
db.default.hikaricp.dataSource.password=password
db.default.hikaricp.dataSource.databaseName=mydb
db.default.hikaricp.dataSource.serverName=localhost
有两个地方可以让您准确了解如何配置连接池:
从那里,您会看到您的池必须配置如下:
db {
default {
driver=org.postgresql.Driver
url="jdbc:postgresql://localhost/timeseries"
user=postgres
password=postgres
hikaricp {
dataSourceClassName = org.postgresql.ds.PGSimpleDataSource
connectionTestQuery = "SELECT 1"
# Data source configuration options. Must be INSIDE
# the hikaricp "node" here
dataSource {
# anything you need to configure here
...
}
}
}
}
注意配置节点是如何嵌套的:db
-> default
-> hikaricp
-> dataSource
。那是因为 dataSource
是 HikariCP 特有的配置。正如您在 reference.conf
文件中看到的,BoneCP 不提供此配置节点。
此外,Typesafe Configuration library 支持上面的配置或编写更多 "plainly" 如下所示:
db.default.driver=org.postgresql.Driver
db.default.url="jdbc:postgresql://localhost/timeseries"
db.default.user=postgres
db.default.password=postgres
db.default.hikaricp.dataSourceClassName = org.postgresql.ds.PGSimpleDataSource
db.default.hikaricp.connectionTestQuery = "SELECT 1"
我正在尝试设置一个连接到本地 postgres 的播放框架服务器。
我现在的applications.conf
是这样的:
dbplugin=disabled
db {
default {
dataSourceClassName=org.postgresql.ds.PGSimpleDataSource
dataSource {
user="postgres"
password="postgres"
databaseName="timeseries"
serverName="localhost"
}
hikaricp {
connectionTestQuery = "SELECT 1"
}
}
}
我的 build.sbt 只添加了最新的 jdbc for postgres:
lazy val root = (project in file(".")).enablePlugins(PlayJava)
scalaVersion := "2.11.6"
libraryDependencies ++= Seq(
javaJdbc
, cache
, javaWs
, "org.postgresql" % "postgresql" % "9.4.1207.jre7"
)
我收到的错误是
[error] - application -
[info]
[info] ! @6ookeg34l - Internal server error, for (GET) [/] ->
[info]
[info] play.api.UnexpectedException: Unexpected exception[CreationException: Unable to create injector, see the following errors:
[info]
[info] 1) Error in custom provider, Configuration error: Configuration error[Cannot connect to database [default]]
[info] while locating play.api.db.DBApiProvider
[info] while locating play.api.db.DBApi
[info] for parameter 0 at play.db.DefaultDBApi.<init>(DefaultDBApi.java:28)
[info] at play.db.DefaultDBApi.class(DefaultDBApi.java:28)
[info] while locating play.db.DefaultDBApi
[info] while locating play.db.DBApi
[info] for field at play.db.DBModule$NamedDatabaseProvider.dbApi(DBModule.java:61)
[info] while locating play.db.DBModule$NamedDatabaseProvider
[info] at com.google.inject.util.Providers$GuicifiedProviderWithDependencies.initialize(Providers.java:149)
[info] at play.db.DBModule.bindings(DBModule.java:40):
[info] Binding(interface play.db.Database qualified with QualifierInstance(@play.db.NamedDatabase(value=default)) to ProviderTarget(play.db.DBModule$NamedDatabaseProvider@3782a5cb)) (via modules: com.google.inject.util.Modules$OverrideModule -> play.api.inject.guice.GuiceableModuleConversions$$anon)
[info] Caused by: Configuration error: Configuration error[Cannot connect to database [default]]
我发现,我的 play 2.4 不需要 hikari 作为显式依赖项。另外密码和用户名以及数据库名称都是正确的。
除了框架的网站之外,我实际上不知道在哪里可以找到更多信息,而且我已经广泛地检查了这两个网站。很多人似乎都遇到了类似的问题,尽管他们的解决方案对我没有帮助,或者只是我到目前为止的道路上的一步。
找到答案:
您需要使用这种格式:
dataSourceClassName=org.postgresql.ds.PGSimpleDataSource
dataSource.user=postgres
dataSource.password=sdfsdfasd
dataSource.databaseName=timeseries
dataSource.serverName=localhost
hikaricp .connectionTestQuery = "SELECT 1"
也试试:
db.default.hikaricp.dataSourceClassName=org.postgresql.ds.PGSimpleDataSource
db.default.hikaricp.dataSource.user=username
db.default.hikaricp.dataSource.password=password
db.default.hikaricp.dataSource.databaseName=mydb
db.default.hikaricp.dataSource.serverName=localhost
有两个地方可以让您准确了解如何配置连接池:
从那里,您会看到您的池必须配置如下:
db {
default {
driver=org.postgresql.Driver
url="jdbc:postgresql://localhost/timeseries"
user=postgres
password=postgres
hikaricp {
dataSourceClassName = org.postgresql.ds.PGSimpleDataSource
connectionTestQuery = "SELECT 1"
# Data source configuration options. Must be INSIDE
# the hikaricp "node" here
dataSource {
# anything you need to configure here
...
}
}
}
}
注意配置节点是如何嵌套的:db
-> default
-> hikaricp
-> dataSource
。那是因为 dataSource
是 HikariCP 特有的配置。正如您在 reference.conf
文件中看到的,BoneCP 不提供此配置节点。
此外,Typesafe Configuration library 支持上面的配置或编写更多 "plainly" 如下所示:
db.default.driver=org.postgresql.Driver
db.default.url="jdbc:postgresql://localhost/timeseries"
db.default.user=postgres
db.default.password=postgres
db.default.hikaricp.dataSourceClassName = org.postgresql.ds.PGSimpleDataSource
db.default.hikaricp.connectionTestQuery = "SELECT 1"