【问题标题】:can't connect to mysql in playframework无法在playframework中连接到mysql
【发布时间】:2016-09-09 13:20:15
【问题描述】:

我正在尝试在 Playframework 2.4 中连接 MySQL(我创建了 play java 项目)。

我已经通过brew在mac中安装了mysql 5.7,并创建了用户和数据库。

并且我在 application.conf 和 build.sbt 中添加了一些配置。

这里是 application.conf

    db.default.driver=com.mysql.jdbc.Driver
    db.default.url="jdbc:mysql://localhost/testplay"
    db.default.user="test"
    db.default.password= "test"

这里是 buid.sbt。

libraryDependencies ++= Seq(
  javaJdbc,
  cache,
  javaWs,
 "mysql" % "mysql-connector-java" % "5.1.35"
)

我已经在项目文件夹中完成了“sbt”和“activator run”。

但是当我连接到http://localhost:9000/ 时,它返回“配置错误无法连接到数据库[db]”。

应用程序日志摘要是

play.api.Configuration$$anon$1: Configuration error[Cannot connect to database [db]]


Caused by: play.api.Configuration$$anon$1: Configuration error[dataSource or dataSourceClassName or jdbcUrl is required.]
    at play.api.Configuration$.configError(Configuration.scala:154)
    at play.api.PlayConfig.reportError(Configuration.scala:996)
    at play.api.db.HikariCPConnectionPool.create(HikariCPModule.scala:70)
    at play.api.db.PooledDatabase.createDataSource(Databases.scala:199)
    at play.api.db.DefaultDatabase.dataSource$lzycompute(Databases.scala:123)
    at play.api.db.DefaultDatabase.dataSource(Databases.scala:121)
    at play.api.db.DefaultDatabase.getConnection(Databases.scala:142)
    at play.api.db.DefaultDatabase.getConnection(Databases.scala:138)
    at play.api.db.DefaultDBApi$$anonfun$connect$1.apply(DefaultDBApi.scala:44)
    ... 66 common frames omitted


Caused by: java.lang.IllegalArgumentException: dataSource or dataSourceClassName or jdbcUrl is required.
    at com.zaxxer.hikari.HikariConfig.validate(HikariConfig.java:784)
    at play.api.db.HikariCPConfig.toHikariConfig(HikariCPModule.scala:141)
    at play.api.db.HikariCPConnectionPool$$anonfun$1.apply(HikariCPModule.scala:57)
    at play.api.db.HikariCPConnectionPool$$anonfun$1.apply(HikariCPModule.scala:54)
    at scala.util.Try$.apply(Try.scala:192)
    at play.api.db.HikariCPConnectionPool.create(HikariCPModule.scala:54

你能告诉我如何解决这个问题吗?

【问题讨论】:

  • 我不是要光顾,但MySQL运行对吗?什么版本的 Play,我假设您使用的是 Play-Java?
  • 感谢您的评论! Play 版本是 2.4,是的,我正在使用 Play-Java。我以为 MySQL 正在运行..(我通过 ps aux | grep mysqld 检查了它)但是,MySQL 可能存在一些问题。
  • 您的配置和依赖项看起来没问题,所以我首先排除 MySQL 没问题,并且您的 testplay 架构和凭据正确。
  • 我明白了。用户名和密码正确,testplay 的权限也可以。而且,我尝试了 127.0.0.1 而不是 localhost 但我没有工作..
  • 我认为 SQL+ 命令行客户端附带 MySql - 您可以尝试通过该客户端连接到您的架构以检查它不是您的 Play 应用程序。

标签: java mysql playframework


【解决方案1】:

在 Play 2.4 及更高版本中指定用户名的正确键是 username,而不是 user。您可以在JDBC Settings - Reference 部分获取更多信息。

db.default.username="test"

对于 2.3 和可能更旧的版本,您使用的密钥 (user) 是正确的。

【讨论】:

  • 感谢您的评论。连接错误的原因是您指出的用户名参数,并且我将 url 添加到 application.conf 中的错误位置 ..(我将其添加到 'db { }'。我从 db{} 中写入它并且它有效)跨度>
【解决方案2】:

从堆栈跟踪来看,配置参数似乎不再只是url,而是`jdbcUrl。试试这个:

...
db.default.jdbcUrl="jdbc:mysql://localhost/testplay"
// you may also need to change user to username
db.default.username=test
...

【讨论】:

  • 感谢您的回复!!我尝试了您的建议,但我返回了相同的错误和日志...
  • 这根本不是解决方案。
【解决方案3】:

我认为 mySql 的正确连接 url 应该包含用户名和密码,尽管它们是单独定义的 - 至少这是我正在做的。 在你的情况下,这是这样的:

db.default.driver=com.mysql.jdbc.Driver
db.default.user="test"
db.default.password= "test"   
db.default.url="mysql://test:test@localhost/testplay"

我更喜欢使用参数化网址:

db.default.driver=com.mysql.jdbc.Driver
db.default.user="test"
db.default.password= "test"   
db.host="localhost"
db.schema="testplay"
db.default.url="mysql://"${db.default.username}":"${db.default.password}"@"${dbhost}"/"${dbschema}

这可能看起来更复杂,即第一个 url,但这可以防止错误并提供更好的灵活性。这样,您可以轻松替换属性值,而不会错误地破坏 url 格式。

您可能还应该注意设置 db.default.jndiName 属性 - 我不知道,它是否与 jdbc 相关。我正在使用 JPA/hibernate,它是必需的 - 我使用 persistence.xml 中定义的值。

【讨论】:

  • 感谢您的评论!我想不出使用参数化网址的想法。
猜你喜欢
  • 2016-10-24
  • 1970-01-01
  • 2013-05-10
  • 2014-04-09
  • 2023-03-28
  • 2011-09-27
相关资源
最近更新 更多