簡體   English   中英

在playframework中無法連接到mysql

[英]can't connect to mysql in playframework

我正在嘗試在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

你能告訴我如何解決這個問題嗎?

在Play 2.4和更高版本中指定用戶名的正確鍵是username而不是user 您可以在JDBC設置-參考部分中獲得更多信息。

db.default.username="test"

在2.3及更早的版本中,您使用的密鑰( user )是正確的密鑰。

從stacktrace看來,配置參數似乎不再只是url而是`jdbcUrl。 嘗試這個:

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

我認為,正確連接到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屬性-我不知道,id與jdbc有關。 我正在使用JPA /休眠,這是必需的-我使用persistence.xml中定義的值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM