【问题标题】:play slick database configuration issues with postgres driver使用 postgres 驱动程序玩光滑的数据库配置问题
【发布时间】:2017-09-09 23:33:27
【问题描述】:

我正在尝试使用 slick 和 postgres 设置一个简单的 play 2.5 应用程序,但似乎无法克服错误。
我得到的错误是

[error] p.a.d.s.DefaultSlickApi - Failed to create Slick database config for key default.
slick.SlickException: Error getting instance of profile "slick.jdbc.PostgresProfile"
...
Caused by: java.lang.InstantiationException: slick.jdbc.PostgresProfile
...
Caused by: java.lang.NoSuchMethodException: slick.jdbc.PostgresProfile.<init>()
...

我的application.conf中有以下内容

slick.dbs.default {
  driver = "slick.jdbc.PostgresProfile"
  db = {
    driver = "org.postgresql.Driver"

    user = postgres
    host = localhost
    port = 5432
    password = ""

    host = ${?EVENTUAL_DB_HOST}
    port = ${?EVENTUAL_DB_PORT}
    user = ${?EVENTUAL_DB_USER}
    password = ${?EVENTUAL_DB_PW}
    url = "jdbc:postgresql://"${slick.dbs.default.db.host}":"${slick.dbs.default.db.port}"/"${slick.dbs.default.db.user}
  }
}

这些在我的依赖项中

  "com.typesafe.play" %% "play-slick" % "2.1.0",
  "com.typesafe.slick" %% "slick-codegen" % "3.1.1",
  "com.github.tminglei" %% "slick-pg" % "0.15.0-RC", //"0.14.6",
  "org.postgresql" % "postgresql" % "42.0.0"

如果我将 slick.dbs.default.driver 更改为 slick.driver.PostgresDriver(现在显然已弃用)我会得到 ​​p>

[error] p.a.d.s.DefaultSlickApi - Failed to create Slick database config for key default.
slick.SlickException: Error getting instance of profile "slick.driver.PostgresDriver"
...
Caused by: java.lang.ClassNotFoundException: slick.driver.PostgresDriver
...

我正要把头发拉出来,找不到任何其他资源可供查看。有人知道发生了什么吗?

【问题讨论】:

  • 可能是slick.dbs.default.driver="slick.driver.PostgresDriver$" 而不是Profile
  • @insan-e 对不起,我有一个错字,我试过slick.driver.PostgresDriver,我想我也试过slick.driver.PostgresDriver$,结果相同,但让我再试一次以防万一。
  • @insan-e whelp,回去尝试slick.jdbc.PostgresProfile$,现在它可以工作了。如果你想提交答案我会接受,否则我稍后会自己回答。
  • 我有一个 play 2.5 + Slick + MySQL 的工作示例(是的,我知道这不是 Postgresql,但也许你会发现比较两者的一些问题。迁移示例从MySQL 到 Postgresql):github.com/pedrorijo91/play-slick3-steps/tree/play2.5(如果你需要书面教程,pedrorijo.com/blog/play-slick 有一个)

标签: postgresql scala playframework slick play-slick


【解决方案1】:

果然,在 insan-e 的推荐下,我所要做的就是添加一个$。所以slick.dbs.default.driver 应该是"slick.jdbc.PostgresProfile$"

【讨论】:

  • $ 在这种情况下意味着什么?为什么需要它?
  • @freakman 它与编译的类名有关,请参见 stackoverflow.com/questions/11388840/…
  • 但在某些地方你需要用 $ 传递完整的类名而在其他地方没有它,这很奇怪
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-30
相关资源
最近更新 更多