Не удается подключиться к базе данных (PostgreSQL) [по умолчанию]

я

CreationException: Unable to create injector, see the following errors: 
1) Error in custom provider, Configuration error: Configuration error[Cannot connect to database [default]]
[...]
2) Error in custom provider, Configuration error: Configuration error[Cannot connect to database [default]]

первоначально у меня была база данных MySQL, используемая с приложением Play Framework, которое работало, но я хотел изменить ее на PostgreSQL, и именно тогда начали появляться проблемы. Я установил их на свой компьютер Ubuntu и изменил конфигурацию воспроизведения для использования Postgres (добавлено "postgresql" % "postgresql" % "9.1-901-1.jdbc4", построить.sbt и изменен db.свойства по умолчанию для ссылки на Postgres). Точное application.conf - это:

db.default.driver="org.postgresql.Driver"
db.default.url="jdbc:postgres://localhost:5432/playdb"
db.default.username="luka"
db.default.password="test"

я вручную создал пользователя luka с тестом пароля и playdb базе. Я пробовал с пользователем postgres, а также безрезультатно.

что меня больше беспокоит, MySQL не будет работать ни теперь с той же ошибкой. Я создал новый проект только с изменением db.параметры по умолчанию в conf и он терпит неудачу таким же образом. Комментируя application.conf заставить его уйти, так что это определенно проблема. Я проверил журналы PostgreSQL (/var/log/postgresql/postgresql-9.4-main.log) и единственная строка, которая не кажется правильной, это [unknown]@[unknown] LOG: invalid length of startup packet. Он появляется несколько раз, но не каждый раз, когда я обновить (Я даже не уверен, что это связано). Я удалил mysql-server С моего ПК, надеясь, что все волшебным образом исправится. Это не так.

идеи?

я использую Play 2. 4. 6 и IntelliJ IDEA 15. Проект создается с помощью активатора и импорта источников в IDEA (с использованием модели SBT).

редактировать я также получаю ошибки при добавлении db.default.hikaricp.connectionTestQuery = "SELECT 1" мой application.conf.

4 ответов


Итак, однозначный ответ:

во-первых, в url базы данных есть ошибка, она должна быть db.default.url="jdbc:postgresql://localhost:5432/playdb" as chabeee указал. Это единственный правильный формат для db.default.url (не jdbc:postgresql://username:pasword:localhost/dbname или подобное, как я видел, предлагая в других местах).

во-вторых, сложнее, что есть ошибка в драйвере как Салем указал и обходной путь добавляет db.default.hikaricp.connectionTestQuery = "SELECT 1" to application.conf.
Однако эта ошибка исправлена (ну, это обходной путь реализован) в версиях более поздних, чем 9.1-903. Улов, после версии 9.1-901 postgresql изменил свой groupID в репозиториях, и теперь на него ссылается org.postgresql. Лучшим решением, чем обходной путь, было бы обновление зависимостей до "org.postgresql" % "postgresql" % "9.4-1206-jdbc4" (текущая версия, MVNrepository). Добавьте соответствующую версию jdbc к последнему драйверу PostgreSQL (4 для Java 6, 41 для Java 7,42 для Java 8).

мой финал application.conf:

db.default.driver="org.postgresql.Driver"
db.default.url="jdbc:postgresql://localhost/playdb" #the port is optional
db.default.username="luka"
db.default.password="test"

и libraryDependencies на build.sbt:

libraryDependencies ++= Seq(
  jdbc,
  "org.postgresql" % "postgresql" % "9.4-1206-jdbc42",
  cache,
  javaWs
)

обновление 2017: Я только сейчас заметил, что вскоре после написания этого ответа они изменили схему управления версиями и удалили фрагмент-JDBC[code], заменив его .jre6, .jre7 или ничего, по-видимому, это означает, что он предназначен для последней версии Java (я не нашел ничего, поддерживающего это утверждение, но он работает). Еще в феврале 2017 года они изменена схема версии опять и перескочил с основной версии 9 на 42, сделав текущую версию (по состоянию на 17 июля 2017 года) обозначенной "org.postgresql" % "postgresql" % "42.1.3" (или, соответственно, "org.postgresql" % "postgresql" % "42.1.3.jre7" / "org.postgresql" % "postgresql" % "42.1.3.jre6")


из вашего stacktrace

JDBC4 связи.метод isValid () не поддерживается, тестовый запрос соединения должен быть настроен

в основном это проблема с драйвером (он не поддерживает этот метод), но вы должны быть в состоянии обойти это указание тестовый запрос в application.conf:

play.db.default.hikaricp.connectionTestQuery = "SELECT 1"

попробуйте заменить эту строку:

db.default.url="jdbc:postgres://localhost:5432/playdb"

для этого:

db.default.url="jdbc:postgresql://localhost:5432/playdb"

надеюсь, это поможет.


вы случайно на Mac, и у вас есть postgresql .jar-файл в свой ?

Edit: Извините, я новичок. Я столкнулся с " соединением JDBC4.IsValid () метод не поддерживается " сообщение при использовании Hikari на моем Mac, и я решил его, найдя и удалив JDBC3 .jar-файл в этом каталоге расширений. Я не знаю, как он туда попал (возможно, когда я установил PostgreSQL или какой-то связанный инструмент), но я обнаружил, что он будет загружен вместо любой JDBC4 .файл jar на моем пути к классам. Возможно, что-то подобное происходит в Ubuntu. Вероятно, стоит проверить, поскольку другие проблемы, связанные с JDBC4, могут возникнуть помимо "isValid()".