2016-09-09 5 views
1

Ich versuche, eine Verbindung zu MySQL in Playframework 2.4 (Ich habe Project Play Java erstellt).kann nicht mit mysql in playframework verbinden

Ich habe mysql 5.7 in mac by brew installiert und ich habe Benutzer und Datenbank erstellt.

Und ich habe einige Konfigurationen zu application.conf und build.sbt im Spiel hinzugefügt.

Hier application.conf

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

Hier buid.sbt.

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

Ich habe 'sbt' und 'activator run' im Projektordner ausgeführt.

Allerdings, wenn ich mit http://localhost:9000/ verbunden, gab es "Konfigurationsfehler kann keine Verbindung zur Datenbank [db]".

das Anwendungsprotokoll summury ist

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 

Würden Sie mir sagen, wie ich dieses Problem lösen kann?

+0

Ich will nicht bevormunden, aber MySQL läuft richtig? Welche Version von Play und ich nehme an, dass Sie Play-Java verwenden? – Nio

+0

Vielen Dank für Sie! Play-Version ist 2.4 und ja, ich benutze Play-Java. Ich dachte, MySQL läuft .. (Ich überprüfte es durch ps aux | grep mysqld) Aber es kann ein Problem in MySQL geben. – user3119018

+1

Ihre Konfiguration und Abhängigkeiten sehen gut aus, also würde ich zuerst ausschließen, dass MySQL in Ordnung ist, und Ihr 'testplay' Schema und die Anmeldeinformationen sind korrekt. – Nio

Antwort

1

Aus dem Stacktrace scheint es, dass der Konfigurationsparameter nicht mehr nur url ist, sondern `jdbcUrl. Versuchen Sie folgendes:

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

Danke für Ihre Antwort !! Ich versuchte Ihren Rat, aber ich rettete den gleichen Fehler und loggt ... – user3119018

+1

Dies ist überhaupt keine Lösung. –

2

Der richtige Schlüssel den Benutzernamen in Play 2.4 angeben und neuer ist username, nicht user. Sie können weitere Informationen im Bereich JDBC Settings - Reference erhalten.

db.default.username="test" 

Mit 2,3 und wahrscheinlich älteren Versionen der Schlüssel Sie verwendet (user) war die richtige.

+0

Danke für Ihren Kommentar. Der Grund für den Verbindungsfehler ist der von dir angegebene Benutzername, und ich habe url an die falsche Stelle in der application.conf .. (Ich habe es zu 'db {}' hinzugefügt. Ich habe es aus db {} geschrieben und es hat funktioniert) – user3119018

1

Ich denke, dass die richtige Verbindung URL zu mySql Benutzername und Passwort enthalten sollte, obwohl sie separat definiert sind - zumindest ist das, was ich tue. In Ihrem Fall ist dies etwas wie folgt aus:

db.default.driver=com.mysql.jdbc.Driver 
db.default.user="test" 
db.default.password= "test" 
db.default.url="mysql://test:[email protected]/testplay" 

Ich ziehe parametrischer url zu verwenden:

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} 

Dies ist wahrscheinlich auf Ihre anspruchsvollere sieht, dass die erste URL, aber das verhindert, dass Fehler und bietet bessere Flexibilität. Auf diese Weise können Sie den Eigenschaftswert leicht ersetzen, ohne versehentlich das URL-Format zu brechen.

Sie sollten wahrscheinlich auch darauf achten, die db.default.jndiName Eigenschaft - ich weiß nicht, ID ist es relevant für JDBC. Ich verwende JPA/Hibernate und es wird benötigt - ich verwende den Wert in Persistence.xml definiert.

+0

Danke Für deinen Kommentar! Ich konnte nicht auf die Idee kommen, paramatic url zu verwenden. – user3119018