2015-07-19 13 views
10

Entweder fehlt mir ein Kernkonzept tief in einigen Dokumentationen (Frühling, Frühlingsstiefel, H2, HSQLDB, Derby, IntelliJ) oder ich habe das zu lange angeguckt .Spring Boot + IntelliJ + Eingebettete Datenbank = Kopfschmerz

Ich habe ein Spring Boot Projekt. Versucht, zuerst eine H2-DB zu benutzen und zu initialisieren, habe versucht, es in IntelliJ zu verbinden, nur um festzustellen, dass ich die db nicht ohne Weiteres durchsuchen kann, ohne mein erstgeborenes Kind abzugeben (Connect to H2 database using IntelliJ database client).

Also zog ich nach DerbyDB. Das Gleiche - db-Stammordner wird in meiner App erstellt, ich verbinde mich mit ihm in IntelliJ, aber meine Tabellen, die gerade beim Start der App erstellt wurden, sind nicht zum Durchsuchen verfügbar.

Ich habe sogar versucht SQLite, aber die Unterstützung für SQLite ist nicht so gut und bestimmte Update-Funktionen waren nicht verfügbar, aber ich könnte mindestens meine Tabellen in IntelliJ Browser finden!

Ich möchte nur eine einfache einzelne Datei eingebettete DB, die ich verwenden, durchsuchen und spielen mit leicht. Irgendwelche Vorschläge?!

Wenn ich die Anwendung ausführen, sehe ich, dass das Schema exportiert wird:

2015-07-19 09:37:45.836 INFO 98608 --- [ost-startStop-1] org.hibernate.tool.hbm2ddl.SchemaExport : HHH000227: Running hbm2ddl schema export 
Hibernate: drop table user_roles if exists 
Hibernate: drop table users if exists 
Hibernate: create table user_roles (id bigint generated by default as identity, role_name varchar(255), version bigint, user_id bigint, primary key (id)) 
Hibernate: create table users (id bigint generated by default as identity, email varchar(255), password varchar(255), username varchar(255), version bigint, primary key (id)) 
Hibernate: alter table user_roles add constraint FK_g1uebn6mqk9qiaw45vnacmyo2 foreign key (user_id) references users 
2015-07-19 09:37:45.849 INFO 98608 --- [ost-startStop-1] org.hibernate.tool.hbm2ddl.SchemaExport : HHH000230: Schema export complete 

In IntelliJ, nichts (eine Fernquelle jdbc mit: h2: ./ Test; AUTO_SERVER = TRUE nach heenenee Vorschlag):

enter image description here

ich sehe einige Stimmen, weil sein unklares zu schließen, was ich frage:

Wie entwickle ich Anwendungen mit H2, HSQLDB oder Derby-Datenbanken und verbinden Sie mit ihnen mit IntelliJ?

+0

Verwenden von './Test', da der Pfad 2 dbs ergibt: eins im Arbeitsverzeichnis des Spring-Boot-Projekts und eins im Arbeitsverzeichnis von IntelliJ (oder in der Nähe). Verwenden Sie '~/test' an beiden Stellen, so dass beide URLs auf dieselbe Stelle im Dateisystem zeigen. – heenenee

Antwort

6

H2 Automatic Mixed Mode sollte für Sie in Ordnung sein. Verwenden Sie jdbc:h2:~/mydbInHomeDir;AUTO_SERVER=TRUE als Ihre spring.datasource.url. Erstellen Sie in IntelliJ eine entfernte H2-Datenquelle und verwenden Sie die exakt gleiche JDBC-URL. Möglicherweise müssen Sie im Fenster IntelliJ-Datenbank explizit auf die Schaltfläche Synchronisieren klicken, damit die Datenbanktabellen angezeigt werden.

+0

das hat bei mir funktioniert. Vielen Dank. Weitere Details zum AUTO_SERVER-Modus finden Sie unter [link] http://www.h2database.com/html/features.html#auto_mixed_mode – Vladimir

1

Ich hatte ähnliches Problem. Es war aufgrund der Standard-create-drop ddl-Strategie des Ruhezustands. Mit dieser Strategie nach dem Beenden der Anwendung heruntergefahren Hibernate das Schema am Ende der Sitzung, deshalb IntelliJ nichts anzeigen. Ändern Sie die ddl-Strategie in die create und Hibernate wird das Schema erstellen und vorherige Daten beim nächsten Start der Anwendung zerstören. Hier

ist ein Beispiel für meine Konfiguration:

Anwendung.yml

spring: 
    datasource.url: jdbc:h2:./db/testDb 
    jpa.hibernate.ddl-auto: create 

IntelliJ Datenbank Eigenschaften

enter image description here

Ergebnis

enter image description here

+0

Vielen Dank dafür, vielleicht wird es jemandem helfen. Ich bin zu anderen Frameworks übergegangen. – Jack

0

hinzuzufügen, was heenenee oben erwähnt. Wenn Sie AUTO_SERVER nicht angeben, wird nur eine Verbindung zu Ihrer H2-Instanz zugelassen.

Ich benutze Spring-Boot mit Feder-Daten-Jpa. Stellen Sie sicher, dass @Entity für Ihre Entitäten deklariert ist, die jede Tabelle darstellen.

Es folgt mein application.yml/application.properties

spring.datasource.url: 
jdbc:h2:file:/Users/blah[![enter image description here][1]][1]/db/vlad4;AUTO_SERVER=TRUE 
spring.datasource.username: sa 
spring.datasource.password: 

spring: 
    jpa: 
    hibernate: 
     ddl-auto: create #will create schema based on entities 
    show-sql: true 

Ihre Anwendung starten und einige Daten in sie importieren. Frühlings-Boot werden Ihre Daten automatisch importieren, wenn Sie import.sql im Classpath ex haben: /src/main/resources/import.sql

Konfigurieren Sie IntelliJ wie so enter image description here

Wenn Sie nicht IntelliJ verwenden Laden sie die Server/Client-Combo @ http://www.h2database.com/html/download.html es extrahieren und den Browser-basierten Client beginnen:

h2/bin: java -cp h2*.jar org.h2.tools.Server 

Verbindung zu Ihrem eingebetteten Datenbank durch die Verbindungszeichenfolge festgelegt wird: enter image description here

Verwandte Themen