2015-03-09 20 views
17

L'app My Grails utilizza un database h2 in modalità dev (il comportamento predefinito per le app Grails). Le impostazioni di connessione DB in DataSource.groovy sonoConnessione al database H2 tramite il client del database IntelliJ

dataSource { 
    pooled = true 
    jmxExport = true 
    driverClassName = "org.h2.Driver" 
    username = "sa" 
    password = "" 
    dbCreate = "create-drop" // one of 'create', 'create-drop', 'update', 'validate', '' 
    url = "jdbc:h2:mem:devDb;MVCC=TRUE;LOCK_TIMEOUT=10000;DB_CLOSE_ON_EXIT=FALSE" 
} 

Sto provando ad installare un collegamento per questo database utilizzando gli strumenti client di database di IntelliJ IDEA. Comincio la creazione della connessione in questo modo

enter image description here

Poi, nella seguente finestra di dialogo, entro nella URL JDBC

enter image description here

e scegliere tutti i database disponibili nella scheda "Schemi & tabelle" .

enter image description here

Il pulsante "Test di connessione" indica il successo, ma come si può vedere dal cerchio rosso, si trovano nessuna tabella. Sembra che abbia configurato correttamente una connessione al server h2, ma non lo schema stesso.

BTW, provo a configurare questa connessione una volta che l'app è in esecuzione, quindi sono sicuro che lo schema/le tabelle effettivamente esistono.

+0

Hai mai capire questo? Ho usato i consigli di Mark senza alcun risultato (utilizzare AUTO_SERVER = TRUE e il DB incorporato nella directory principale). Non riesco mai a sfogliare un db H2 da Intellij. Questo è diventato ridicolmente difficile. – Jack

risposta

30

La configurazione è per un database h2:mem. I database di memoria non dispongono di tabelle al momento della connessione e qualsiasi & tutte le tabelle vengono perse quando tutte le connessioni vengono chiuse. Inoltre, un (denominato) nel database di memoria è univoco per il processo JVM che lo apre. Da H2 documentation:

A volte sono richieste più connessioni allo stesso database in memoria. In questo caso, l'URL del database deve includere un nome. Esempio: jdbc: h2: mem: db1. L'accesso allo stesso database utilizzando questo URL funziona solo all'interno della stessa macchina virtuale e dell'ambiente di caricamento classi. (enfasi aggiunta)

Ciò significa IDEA creerà un unico devDb nel suo spazio JVM (e classloader) e l'applicazione creerà un unico devDb nel suo spazio JVM (e classloader). Non è possibile connettersi a un database in memoria da un processo JVM esterno.

Se si desidera collegare sia l'applicazione e IntelliJ IDEA (o qualsiasi altro strumento DB) ad un database di H2, allo stesso tempo, è necessario sia

  1. usano per un database incorporato (che scrive un file) nella propria applicazione e utilizzare Mixed Mode per consentire IntelliJ IDEA (e/o altri strumenti di database) per connettersi ad essa
  2. utilizzare un database modalità server

Vedi http://www.h2database.com/html/features.html#connection_modes per ulteriori informazioni.

+0

per coloro che si chiedono come abilitare la modalità mista: jdbc: h2: ~/test; AUTO_SERVER = TRUE (sia nelle impostazioni di app config e idea db manager) – deviant

10

Questo articolo ha una grande scrittura su come impostare il client di database IntelliJ per connettersi a un database di H2 in memoria se vi capita di essere utilizzando Primavera Boot: https://techdev.io/en/developer-blog/querying-the-embedded-h2-database-of-a-spring-boot-application

Fondamentalmente, si avvolge il database in memoria con un server TCP, quindi si dispone di un punto di accesso per connettersi con un client SQL tramite accesso remoto.

+1

Link is dead now :-( – Rob

+2

https://techdev.io/ it/developer-blog/querying-the-embedded-h2-database-of-a-spring-boot-application – DRaehal

+0

Questa dovrebbe essere una risposta accettata! Grazie mille! – www

Problemi correlati