当前位置:  开发笔记 > 后端 > 正文

播放无法连接到(PostgreSQL)数据库[​​默认]

如何解决《播放无法连接到(PostgreSQL)数据库[​​默认]》经验,为你挑选了1个好方法。

我越来越

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"

我已手动创建用户luka与密码测试和数据库playdb.我已经尝试过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.



1> Luke..:

所以,明确的答案是:

首先,数据库URL中存在错误,应该db.default.url="jdbc:postgresql://localhost:5432/playdb"像chabeee指出的那样.这是唯一正确的格式db.default.url(所以没有jdbc:postgresql://username:pasword:localhost/dbname或类似,正如我在其他地方所建议的那样).

其次,更棘手的是,有一个在驱动程序中的错误作为萨利姆指出和解决方法是添加db.default.hikaricp.connectionTestQuery = "SELECT 1"application.conf.
但是,在比最近版本更新的版本中修复了这个错误(好吧,已经实现了解决方法)9.1-903.问题是,在版本9.1-901postgresql在repos中更改了它的groupID后现在它被引用了org.postgresql.比解决方法更好的解决方案是更新"org.postgresql" % "postgresql" % "9.4-1206-jdbc4"(当前版本,MVNrepository)的依赖项.将适当的jdbc版本附加到最新的PostgreSQL驱动程序(4适用于Java 6,41适用于Java 7,42适用于Java 8).

我的决赛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"

libraryDependenciesbuild.sbt:

libraryDependencies ++= Seq(
  jdbc,
  "org.postgresql" % "postgresql" % "9.4-1206-jdbc42",
  cache,
  javaWs
)

2017年更新: 我现在才注意到,在写完这个答案后不久,他们改变了版本控制方案并删除了-jdbc [code]片段,将其替换为.jre6,.jre7或者没有,显然意味着它适用于最新的Java版本(I没有发现支持这种说法的任何内容,但它确实有效).然而在2017年2月他们再次改变了版本方案并从主要版本9跳到了42,使得当前版本(截至2017年7月17日)表示为"org.postgresql" % "postgresql" % "42.1.3"(或相应地"org.postgresql" % "postgresql" % "42.1.3.jre7"/ "org.postgresql" % "postgresql" % "42.1.3.jre6")

推荐阅读
linjiabin43
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有