2015-12-16 7 views
5

sto ottenendoPlay non è possibile collegarsi a (PostgreSQL) database [predefinito]

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]] 

stack trace completa è qui: http://hastebin.com/ahacepifaf.txt

Originariamente avevo database MySQL utilizzato con applicazione Play quadro che ha funzionato, ma Volevo cambiarlo in PostgreSQL e in quel momento apparvero i problemi. Li ho installati entrambi sul mio computer Ubuntu e cambiato la configurazione di gioco per usare Postgres (aggiunto "postgresql" % "postgresql" % "9.1-901-1.jdbc4", a build.sbt e cambiato le proprietà db.default per fare riferimento a Postgres). Exact application.conf è:

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

Ho creato manualmente dall'utente luka con test di password e playdb database. Ho provato anche con l'utente postgres senza alcun risultato.

Ciò che mi infastidisce di più, MySQL ora non funzionerà con lo stesso errore. Ho creato un nuovo progetto con la sola modifica dei parametri db.default in conf e fallisce nello stesso modo. Commentando application.conf lo fa andare via, quindi questo è sicuramente il problema. Ho controllato i log di PostgreSQL (/var/log/postgresql/postgresql-9.4-main.log) e solo la riga che non sembra corretta è [unknown]@[unknown] LOG: invalid length of startup packet. Appare più volte, ma non tutte le volte che aggiorno il progetto (non sono nemmeno sicuro che sia correlato). Ho rimosso mysql-server dal mio PC sperando che tutto si risolva magicamente. Non è stato così.

Idee?

Sto utilizzando Play 2. 4. 6 e IntelliJ IDEA 15. Il progetto viene creato utilizzando Activator e importando sorgenti in IDEA (utilizzando il modello SBT).

EDIT Quando aggiungo db.default.hikaricp.connectionTestQuery = "SELECT 1" al mio application.conf, ottengo il seguente errore: http://hastebin.com/hazoraradi.txt

risposta

10

Quindi, la risposta definitiva è:

primo luogo, c'è un errore nel database di URL, dovrebbe essere db.default.url="jdbc:postgresql://localhost:5432/playdb" come chabeee pointed out. È l'unico formato corretto per db.default.url (quindi non jdbc:postgresql://username:pasword:localhost/dbname o simile, come ho visto suggerire in altri posti).

In secondo luogo, più difficile, è che c'è un errore nel driver come Salem pointed out e la soluzione è aggiungere db.default.hikaricp.connectionTestQuery = "SELECT 1" a application.conf.
Tuttavia, il bug è corretto (bene, questa soluzione è implementata) nelle versioni più recenti di 9.1-903.Il problema è che, dopo la versione 9.1-901, postgresql ha cambiato il suo groupID nei repository e ora fa riferimento a org.postgresql. Una soluzione migliore rispetto alla soluzione alternativa sarebbe aggiornare le dipendenze su "org.postgresql" % "postgresql" % "9.4-1206-jdbc4" (current version, MVNrepository). Aggiungere la versione jdbc appropriata al driver PostgreSQL più recente (4 per Java 6, 41 per Java 7, 42 per Java 8).

mio finale 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" 

E libraryDependencies in build.sbt:

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

UPDATE 2017: Ho solo ora notato che non molto tempo dopo aver scritto questa risposta hanno cambiato sistema di controllo delle versioni e rimosso il frammento -jdbc [code], che lo sostituisce con .jre6, .jre7 o niente, a quanto pare significa che è pensato per l'ultima versione di Java (I haven ' Ho trovato qualcosa che supporta questa affermazione, ma funziona). Ancora una volta nel febbraio 2017 hanno changed the version scheme again e saltò dalla versione principale 9-42, rendendo la versione attuale (come, del 17 luglio 2017) indica con "org.postgresql" % "postgresql" % "42.1.3" (o, di conseguenza, "org.postgresql" % "postgresql" % "42.1.3.jre7"/"org.postgresql" % "postgresql" % "42.1.3.jre6")

+0

Questo ha funzionato, ma solo dopo il riavvio dell'applicazione –

+0

La soluzione alternativa (oltre il bug che hai detto) ha funzionato. Grazie! – Silas

1

Dal tuo stacktrace

JDBC4 Connection.isValid() method not supported, connection test query must be configured

Fondamentalmente si tratta di un problema con il driver (che non supporta tale metodo), ma dovresti essere in grado di aggirare il problema specificando una query di prova nel tuo application.conf:

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

Questo risolve effettivamente l'errore originale, tuttavia ne crea uno nuovo: 'play.db.default ha tipo OBJECT piuttosto che STRING' (è su quella linea, ho controllato) – Luke

+0

@Luke Prova a usare' db.default .hikaricp.connectionTestQuery = "SELEZIONA 1" 'invece – Salem

+0

Ho provato anche quello. All'inizio ho pensato che desse lo stesso errore, tuttavia la traccia dello stack ora è diversa: http://hastebin.com/hazoraradi.txt – Luke

1

provare a sostituire questa linea:

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

a questo:

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

Speranza, aiuta.

+1

Il mio db.default.url è già 'jdbc: postgres: // localhost: 5432/playdb ' – Luke

+0

cambialo in postgresQL, quindi mancano i caratteri 'q' e 'l' – chabeee

+0

Questo ha effettivamente risolto il problema, ma anche la soluzione alternativa di Salem deve essere applicata. Giuro che ho appena incollato quella parte, non ho pensato che sarebbe stato impreciso. – Luke

0

Sei per caso su un Mac, e hai un file postgresql .jar nella tua directory /Library/Java/Extensions?

Modifica: Siamo spiacenti, sono nuovo. Ho riscontrato il messaggio "JDBC4 Connection.isValid() metodo non supportato" durante l'utilizzo di Hikari sul mio Mac e l'ho risolto individuando e rimuovendo un file .jar JDBC3 nella directory delle estensioni. Non so come sia arrivato (probabilmente quando ho installato PostgreSQL o qualche strumento correlato) ma ho scoperto che sarebbe stato caricato invece di qualsiasi file .jar JDBC4 sul mio classpath. Forse qualcosa di simile accade in Ubuntu. Probabilmente vale la pena controllare, come potrebbero sorgere altri problemi relativi a JDBC4 oltre a "isValid()".

+0

Questo è più un commento che una risposta alla domanda – slfan

+0

Sì, i commenti sono usati per chiedere chiarimenti, le risposte dovrebbero rispondere alla domanda, non chiederne di più. Ma per risponderti, no, sono su Ubuntu (e ho risolto il problema). – Luke

+0

@Luke Come hai risolto il problema? – Serendipity