我正在
CreationException: Unable to create injector, see the following errors:
1) Error in custom provider, Configuration error: Configuration error[Cannot connect to database [default]]
[...]
2) Error in custom provider, Configuration error: Configuration error[Cannot connect to database [default]]
最初我使用了与Play Framework应用程序一起工作的MySQL数据库,但是我想把它改成PostgreSQL,那就是问题开始出现的时候。我已经在我的Ubuntu计算机上安装了它们并更改了播放配置以使用Postgres(将"postgresql" % "postgresql" % "9.1-901-1.jdbc4",
添加到build.sbt并将db.default属性更改为引用Postgres)。确切的application.conf
是:
db.default.driver="org.postgresql.Driver"
db.default.url="jdbc:postgres://localhost:5432/playdb"
db.default.username="luka"
db.default.password="test"
我手动创建了用户密码测试和数据库playdb的用户luka。我也试过postgres用户,但没有用。
更让我感到困惑的是,MySQL现在无法使用相同的错误。我创建了新项目,只修改了conf中的db.default参数,它以相同的方式失败。评论application.conf
会让它消失,所以这肯定是问题所在。我检查了PostgreSQL日志(/var/log/postgresql/postgresql-9.4-main.log
),只有[unknown]@[unknown] LOG: invalid length of startup packet
的行似乎不正确。它出现多次,但不是每次我刷新项目(我甚至不确定它是否相关)。我已从我的电脑中删除了mysql-server
,希望一切都能神奇地修复自己。它没有。
想法?
我正在使用Play 2. 4. 6和IntelliJ IDEA 15.使用Activator创建项目并将源导入IDEA(使用SBT模型)。
编辑我在向db.default.hikaricp.connectionTestQuery = "SELECT 1"
添加application.conf
时也遇到了错误。
答案 0 :(得分:12)
所以,明确的答案是:
首先,数据库网址存在错误,db.default.url="jdbc:postgresql://localhost:5432/playdb"
应为chabeee pointed out。这是db.default.url
唯一正确的格式(所以没有jdbc:postgresql://username:pasword:localhost/dbname
或类似的格式,正如我在其他地方所建议的那样)。
其次,更棘手的是,驱动程序中存在Salem pointed out错误,解决方法是将db.default.hikaricp.connectionTestQuery = "SELECT 1"
添加到application.conf
。
但是,在比9.1-903
更新的版本中,该错误已得到修复(嗯,已实施该解决方法)。问题是,在版本9.1-901
之后,postgresql在repos中更改了它的groupID,现在它由org.postgresql
引用。比解决方法更好的解决方案是将依赖关系更新为"org.postgresql" % "postgresql" % "9.4-1206-jdbc4"
(current version,MVNrepository)。将适当的jdbc版本附加到最新的PostgreSQL驱动程序(Java {1 4
,Java 7 41
,Java 8 42
。“
我的最终application.conf
:
db.default.driver="org.postgresql.Driver"
db.default.url="jdbc:postgresql://localhost/playdb" #the port is optional
db.default.username="luka"
db.default.password="test"
libraryDependencies
中的build.sbt
:
libraryDependencies ++= Seq(
jdbc,
"org.postgresql" % "postgresql" % "9.4-1206-jdbc42",
cache,
javaWs
)
2017年更新:
我现在才注意到,在写完这个答案后不久,他们改变了版本控制方案并删除了-jdbc [code]片段,将其替换为.jre6,.jre7或者什么都没有,显然意味着它适用于最新的Java版本(我没有发现支持这种说法的任何东西,但它确实有效)。然而在2017年2月他们再次changed the version scheme again并从主要版本9跳到42,使当前版本(截至2017年7月17日)由"org.postgresql" % "postgresql" % "42.1.3"
表示(或相应地,"org.postgresql" % "postgresql" % "42.1.3.jre7"
/ { {1}})
答案 1 :(得分:1)
来自你的堆栈跟踪
不支持JDBC4 Connection.isValid()方法,必须配置连接测试查询
基本上这是您的驱动程序的问题(它不支持该方法),但您应该能够解决它在application.conf
中指定测试查询:
play.db.default.hikaricp.connectionTestQuery = "SELECT 1"
答案 2 :(得分:1)
尝试替换此行:
db.default.url="jdbc:postgres://localhost:5432/playdb"
到此:
db.default.url="jdbc:postgresql://localhost:5432/playdb"
希望,这有帮助。
答案 3 :(得分:0)
您是否有机会在Mac上,并且您的/Library/Java/Extensions
目录中是否有postgresql .jar文件?
编辑抱歉,我是新人。我遇到了不支持" JDBC4 Connection.isValid()方法"在我的Mac上使用Hikari时的消息,我通过在该扩展目录中找到并删除JDBC3 .jar文件来解决它。我不知道它是如何到达那里的(可能在我安装PostgreSQL或一些相关工具时)但我发现它会被加载而不是我的类路径上的任何JDBC4 .jar文件。也许在Ubuntu中发生了类似的事情。可能值得检查,因为除了" isValid()"之外还可能出现与JDBC4相关的其他问题。