Ich habe eine Grails-App, die gut funktioniert, wenn die standardmäßige eingebettete H2-Datenbank verwendet wird. Jetzt müsste ich einige Tests durchführen, bei denen ich eine stärker integrierte Umgebung benötige. Deshalb habe ich H2 dafür im Servermodus verwendet und meine anderen Apps auf die gleiche Datenbank zugreifen lassen.
Ich starte den H2 Server von der Kommandozeile und erhalte tcp://192.168.56.1:9092
für die Server URL. Ich habe es in Grails-Datenquelle als jdbc:h2:tcp://localhost:9092/~/devDb;IFEXISTS=TRUE
festgelegt.
Sobald ich die Grails-App starte, hängt sie einfach. Die Protokolldatei ist leer.
Ich habe die URL mit einem externen DB-Client ausprobiert und kann überprüfen, ob der Server funktioniert.
Wenn der Server über die Befehlszeile mit dem Befehl java -cp h2*.jar org.h2.tools.Server
gestartet wird. Auch versucht mit java -jar h2*.jar -tcp -tcpAllowOthers
, wenn sich die IP-Adresse ändert, aber die Auswirkungen sind die gleichen: Verbindung OK vom SQL-Client, hängt mit Grails.
Die IP-Adresse 192.168.56.1 entspricht localhost , nur für die Klassifizierung. Ich habe es mit beiden in Grails versucht, und die Ergebnisse sind die gleichen. Außerdem arbeiten beide mit externen Clients.
Versionsinformationen:
%Vor%AKTUALISIEREN
OK. Es "hängt" nicht einfach, die Auszeit ist einfach lang. Ich habe das Programm im Hintergrund laufen lassen und es vergessen (vorher hatte ich den Vorgang abgebrochen), den Computer verlassen. Als ich Stunden später zurückkam, hatte ich einen langen Stack von Spring Bean Creation Fehlern, die auf mich warteten. Ich denke, das "Rindfleisch" ist, was unten eingefügt ist.
%Vor%UPDATE 2
Im Folgenden finden Sie die von Thomas in seinem Kommentar vorgeschlagene Protokollierung.
%Vor%Es könnte inkompatible Client- und Serverversionen von H2 sein. Selbst wenn der Client und der Server aushandeln, welche Transportprotokollversion zu verwenden ist, sollte dies theoretisch kein Problem darstellen. Das wäre also ein Fehler in der Server- oder Client-Implementierung. Laut dem Fehlercode ist der Client Version 1.3.173 und der Server ist Version 1.4.180, wie Sie geschrieben haben. Können Sie sicherstellen, dass Sie dieselbe Version für Client und Server verwenden?
Ich habe ein Problem: Connection is broken: "unexpected status 16843008"
wenn Sie versuchen, h2 aus der JetBrains IDEA-Datenbank zu aktualisieren, verbunden durch tcp: jdbc:h2:tcp://localhost:9092/~/dbname
, h2.version=1.4.190
Problem gelöst nur beim Downgrade der h2-Version:
%Vor%Stellen Sie sicher, dass Sie dieselbe h2-Treiberversion auf der Anwendungs- und Clientseite (z. B. IDEA-Datenbank) verwenden.
Es funktioniert auch für InMemory (für den Spring-Boot-Server: spring.datasource.url=jdbc:h2:mem:dbname
und für den tcp-Client: tcp://localhost:9092/mem:dbname
)