Java can';t在playframework中连接到mysql

Java can';t在playframework中连接到mysql,java,mysql,playframework,Java,Mysql,Playframework,我正在尝试连接PlayFramework2.4中的MySQL(我创建了PlayJava项目) 我已经通过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.defa

我正在尝试连接PlayFramework2.4中的MySQL(我创建了PlayJava项目)

我已经通过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”

但是,当我连接到时,它返回“配置错误无法连接到数据库[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

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

从stacktrace看,配置参数似乎不再只是
url
,而是'jdbcUrl'。试试这个:

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

从stacktrace来看,配置参数似乎不再只是
url
,而是'jdbcUrl'。试试这个:

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

在Play 2.4及更新版本中指定用户名的正确键是
username
,而不是
user
。您可以在该部分获得更多信息


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

在Play 2.4和更新版本中指定用户名的正确键是
username
,而不是
user
。您可以在该部分获得更多信息


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

我认为正确的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"
我更喜欢使用参数化url:

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更复杂,但这可以防止bug并提供更好的灵活性。通过这种方式,您可以轻松地替换属性值,而不会错误地破坏url格式


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

我认为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"
我更喜欢使用参数化url:

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更复杂,但这可以防止bug并提供更好的灵活性。通过这种方式,您可以轻松地替换属性值,而不会错误地破坏url格式



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

谢谢你的回复!!我尝试了你的建议,但我返回了相同的错误和日志…这根本不是一个解决方案。谢谢你的回复!!我尝试了你的建议,但我重复了同样的错误和日志…这根本不是一个解决方案。我不是有意光顾,但MySQL运行正常吗?什么版本的Play,我猜您使用的是Play Java?谢谢您的指教!Play版本是2.4,是的,我正在使用Play Java。我以为MySQL正在运行。。(我通过ps aux | grep mysqld进行了检查)但是,MySQL中可能存在一些问题。您的配置和依赖项看起来正常,因此我首先排除MySQL是正常的,并且您的
testplay
schema和凭据是正确的。我明白了。用户名和密码是正确的,testplay的权限也是正确的。而且,我尝试了127.0.0.1而不是localhost,但没有成功。我认为SQL+命令行客户端附带了MySql-您可以尝试通过该客户端连接到您的模式,检查它是否不是您的Play应用程序。我不是想光顾,但MySql运行正常吗?什么版本的Play,我猜您使用的是Play Java?谢谢您的指教!Play版本是2.4,是的,我正在使用Play Java。我以为MySQL正在运行。。(我通过ps aux | grep mysqld进行了检查)但是,MySQL中可能存在一些问题。您的配置和依赖项看起来正常,因此我首先排除MySQL是正常的,并且您的
testplay
schema和凭据是正确的。我明白了。用户名和密码是正确的,testplay的权限也是正确的。而且,我尝试了127.0.0.1而不是localhost,但没有成功。我认为SQL+命令行客户端附带了MySql-您可以尝试通过该客户端连接到您的模式,以检查它不是您的Play应用程序。谢谢您的评论!我想不出使用paramatic url的主意。谢谢你的评论!我想不出使用paramatic url的主意。谢谢你的评论。连接错误的原因是您指出的用户名参数,我在application.conf中将url添加到了错误的位置…(我将其添加到了“db{}”。我从db{}中编写了它,它成功了)感谢您的评论。连接错误的原因是您指出的用户名参数,我在application.conf中将url添加到了错误的位置(我将其添加到了“db{}”。我从db{}中编写了它,它成功了)