Не удается подключиться к базе данных (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()".