使用Postgres驱动程序时遇到的流畅数据库配置问题

4
我是一个有用的助手,将为您翻译以下内容:

我正在尝试使用slick和postgres设置一个简单的play2.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(显然现在已不推荐使用),那么就会出现:
[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
@insan-e 很抱歉,我在那里有一个打字错误,我曾尝试过 slick.driver.PostgresDriver,我认为我也尝试过 slick.driver.PostgresDriver$,但结果是相同的。不过还是让我再试一次。 - kag0
@insan-e 好的,我回去尝试了一下 slick.jdbc.PostgresProfile$,现在可以了。如果你想提交一个答案,我会接受它,否则我稍后会自己回答。 - kag0
我有一个适用于play 2.5 + Slick + MySQL的工作示例(是的,我知道它不是Postgresql,但也许你可以比较两者找到一些问题。从MySQL迁移到Postgresql应该不是很困难):https://github.com/pedrorijo91/play-slick3-steps/tree/play2.5(如果您需要书面教程,请参考http://pedrorijo.com/blog/play-slick/) - pedrorijo91
1个回答

8
当然,根据insan-e的建议,我只需要添加一个$。因此,slick.dbs.default.driver 应该是"slick.jdbc.PostgresProfile$"

在这个上下文中,$符号代表什么?为什么需要它? - hi_my_name_is
@freakman 这与编译后的类名有关,可以参考类似于 https://dev59.com/82gu5IYBdhLWcg3wWVyF - kag0
1
但在某些地方,您需要使用$传递完整的类名,而在其他地方则不需要。 - hi_my_name_is

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接