воспроизвести проблемы с конфигурацией базы данных с помощью драйвера postgres

Я пытаюсь настроить простое приложение play 2.5 с помощью slick и postgres, но не могу справиться с ошибкой.
Я получаю сообщение об ошибке:

[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
...

Я собираюсь рвать на себе волосы здесь и не могу найти никаких других ресурсов, на которые можно было бы посмотреть. Кто-нибудь знает, что происходит?


person kag0    schedule 13.04.2017    source источник
comment
Может slick.dbs.default.driver="slick.driver.PostgresDriver$" а не Profile?   -  person insan-e    schedule 13.04.2017
comment
@insan-e извините, у меня там опечатка, я пробовал slick.driver.PostgresDriver, и я думаю, что пробовал slick.driver.PostgresDriver$ с тем же результатом, но позвольте мне попробовать еще раз на всякий случай.   -  person kag0    schedule 13.04.2017
comment
@insan-e whelp, вернулся и попробовал с slick.jdbc.PostgresProfile$, и теперь это работает. Если вы хотите отправить ответ, я приму его, в противном случае я сам отвечу на него позже.   -  person kag0    schedule 14.04.2017
comment
У меня есть рабочий пример для play 2.5 + Slick + MySQL (да, я знаю, что это не Postgresql, но, возможно, вы обнаружите некоторые проблемы при сравнении обоих. Это не должно быть очень сложным переносом примера из MySQL в Postgresql): github.com/pedrorijo91/play-slick3-steps/tree/play2.5 (если вам нужно письменное руководство, оно есть на pedrorijo.com/blog/play-slick< /а>)   -  person pedrorijo91    schedule 14.04.2017


Ответы (1)


Конечно же, по рекомендации insan-e, все, что мне нужно было сделать, это добавить $. Так что slick.dbs.default.driver должно быть "slick.jdbc.PostgresProfile$".

person kag0    schedule 17.04.2017
comment
что означает этот $ в данном контексте? зачем он нужен? - person freakman; 21.09.2017
comment
@freakman это связано с скомпилированными именами классов, см. что-то вроде stackoverflow.com/questions/11388840/ - person kag0; 22.09.2017
comment
но странно, что в некоторых местах вам нужно передать полное имя класса с $, а в других без него - person freakman; 22.09.2017