it-swarm.com.de

spring Boot-Standard-H2-Jdbc-Verbindung (und H2-Konsole)

Ich versuche einfach, den H2-Datenbankinhalt für eine eingebettete H2-Datenbank zu sehen, die Spring-Boot erstellt, wenn ich in application.properties nichts spezifiziere und mit mvn spring: run beginne. Ich kann den Ruhezustand von JPA sehen, der die Tabellen erstellt, aber wenn ich versuche, auf die h2-Konsole unter der URL unterhalb der Datenbank zuzugreifen, hat die Datenbank keine Tabellen.

http://localhost:8080/console/

Ich sehe Vorschläge wie diese: Inhalt der eingebetteten H2-Datenbank anzeigen, die mit Spring gestartet wurde

Aber ich weiß nicht, wo ich das vorgeschlagene XML in Spring-Boot stecken sollte, und selbst wenn ich es getan habe, möchte ich nicht, dass h2console verfügbar ist, wenn eine externe Datenbank konfiguriert ist. Es ist also wahrscheinlicher, dass ich damit umgehen muss mit einem bedingten Code (oder lassen Sie einfach zu, dass Feder es automatisch verarbeitet, im Idealfall, in dem nur H2 enthalten ist, wenn ein Maven-Profil aktiviert ist).

Hat jemand einen Beispielcode, der zeigt, wie die H2-Konsole im Boot zum Laufen gebracht wird (und auch die Möglichkeit, herauszufinden, was die jdbc-Verbindungszeichenfolge ist, die der Frühling verwendet)?

84
Aaron Zeckoski

So habe ich die H2-Konsole im Springboot mit H2 zum Laufen gebracht. Ich bin nicht sicher, ob dies richtig ist, aber da niemand anderes eine Lösung angeboten hat, werde ich vorschlagen, dass dies der beste Weg ist, dies zu tun.

In meinem Fall habe ich einen bestimmten Namen für die Datenbank gewählt, damit ich beim Starten der H2-Konsole etwas eingeben muss (in diesem Fall "AZ"). Ich denke, das alles ist notwendig, auch wenn es so aussieht, als würde man die spring.jpa.database-Plattform auslassen, tut nichts weh. 

In application.properties:

spring.datasource.url=jdbc:h2:mem:AZ;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect

In Application.Java (oder einer Konfiguration):

@Bean
public ServletRegistrationBean h2servletRegistration() {
    ServletRegistrationBean registration = new ServletRegistrationBean(new WebServlet());
    registration.addUrlMappings("/console/*");
    return registration;
}

Dann können Sie auf die H2-Konsole unter {Server}/Console/zugreifen. Geben Sie dies als JDBC-URL ein: jdbc: h2: mem: AZ

90
Aaron Zeckoski

Ab Spring Boot 1.3.0.M3 kann die H2-Konsole automatisch konfiguriert werden. 

Die Voraussetzungen sind:

  • Sie entwickeln eine Web-App
  • Spring Boot Dev Tools sind aktiviert
  • H2 ist auf dem Klassenpfad

Selbst wenn Sie die Spring Boot Dev Tools nicht verwenden, können Sie die Konsole trotzdem automatisch konfigurieren, indem Sie spring.h2.console.enabled auf true setzen.

Check out this Teil der Dokumentation für alle Details.

Beachten Sie, dass bei dieser Konfiguration auf die Konsole zugegriffen werden kann: http: // localhost: 8080/h2-console/

44
geoand

Ich habe ein Nizza-Tutorial zu diesem Thema gefunden:

https://springframework.guru/using-the-h2-database-console-in-spring-boot-with-spring-security/

Grundsätzlich war die richtige JDBC-URL für mich: jdbc:h2:mem:testdb

41

Eine ähnliche Antwort mit Schritt für Schritt Anleitung.

  1. Fügen Sie Developer Tools Abhängigkeit zu Ihrem pom.xml oder build.gradle hinzu

Maven

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-devtools</artifactId>
        <optional>true</optional>
    </dependency>
</dependencies>

Gradle

dependencies {
    compile("org.springframework.boot:spring-boot-devtools")
}
  1. Zugriff auf die Datenbank von http://localhost:8080/h2-console/
  2. Geben Sie als JDBC-URL jdbc:h2:mem:testdb an
  3. Sie sollten die Entität, die Sie in Ihrem Projekt angegeben haben, als Tabelle anzeigen.
18
biniam

Von http://docs.spring.io/spring-boot/docs/current/reference/html/common-application-properties.html

H2 Web Console (H2ConsoleProperties):

spring.h2.console.enabled=true //Enable the console.
spring.h2.console.path=/h2-console //Path at which the console will be available.

Das Hinzufügen der beiden obigen Zeilen zu meiner Datei application.properties war ausreichend, um auf die H2-Datenbank-Webkonsole zuzugreifen, und zwar mit dem Standardbenutzernamen (sa) und dem Standardkennwort (leer).

16
mancini0

Ich hatte nur unter Eigenschaften in /resources/application.properties. Nachdem Sie Spring Boot mit dieser URL ( http: // localhost: 8080/h2-console/ ) ausgeführt haben, war die Tabelle in der H2-Konsole sichtbar und wurde zum Anzeigen der Tabellendaten gelesen. Außerdem können Sie einfache SQL-Befehle ausführen. Beim Abrufen von Daten werden in Ihrem Java-Code die Spaltennamen in Großbuchstaben geschrieben, obwohl schema.sql Namen in Kleinbuchstaben verwendet. :)

spring.datasource.initialize=true
spring.datasource.url=jdbc:h2:mem:testdb;DB_CLOSE_DELAY=- 1;DB_CLOSE_ON_EXIT=FALSE
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=
spring.h2.console.enabled=true
14
rak22

Wenn Sie die Entwicklertools von Spring Boot verwenden, ist die H2 Console standardmäßig aktiviert. Es kann von /h2-console/aus zugegriffen werden. Verwenden Sie in der Anmeldeschnittstelle für die Eingabe JDBC URL den Wert jdbc:h2:mem:testdb. Achten Sie auf mem string.

Wenn Sie die Entwicklungstools von Spring Boot nicht verwenden, können Sie die Konsole in application.properties mit spring.h2.console.enabled=true aktivieren. Dadurch wird die Konsole unter /h2-console aktiviert. Wenn Sie die URL ändern möchten, können Sie mit spring.h2.console.path=my_console_path einen weiteren Eintrag hinzufügen.

Der Standardschemaname lautet testdb.

Weitere Details finden Sie in Spring Boot Documentation .

8
georger

Für Spring Boot 2.1.1 direkt von Spring Initialzr:

  1. Standardeinstellung mit devtools ist http://127.0.0.1:8080/h2-console/

    • POM: Spring-Boot-Starter, H2, Spring-Boot-Starter-Web, Spring-Boot-devtools
  2. Ohne devtools - Sie müssen es in den Eigenschaften festlegen: spring.h2.console.enabled=true spring.h2.console.path=/h2-console 

    • POM: Spring-Boot-Starter, H2, Spring-Boot-Starter-Web

Sobald Sie dort sind, setzen Sie die JDBC-URL: jdbc: h2: mem: testdb (Die Standardeinstellung funktioniert nicht).

4
Witold Kaczurba

Um die Tabellen abzurufen, müssen Sie lediglich 2 SQL-Dateien schema.sql (für die Tabellenerstellung) und data.sql (Daten für die erstellten Tabellen) erstellen. Diese Dateien werden im Ordner "src/main/resources" abgelegt. Spring Boot erkennt sie automatisch und kümmert sich während der Laufzeit um den Rest.

Wenn Sie in Ihrem Projekt mehr als 2 DB verwenden, stellen Sie sicher, dass bestimmte Dateien verwendet werden, wie (schema-h2.sql - für h2 DB, schema-Oracle.sql - für Oracle DB). Dasselbe gilt auch für data.sql.

Stellen Sie außerdem sicher, dass Sie Tabellen löschen, indem Sie in Ihrer schema.sql als erste Anweisung eine Drop-Table-Anweisung hinzufügen. Um das Anhängen doppelter Datensätze zu vermeiden.

Der Link zum Spring Boot ist hier.

Meine application.properties lautet wie folgt.

spring.datasource.url=jdbc:h2:~/file/Shiva;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE
spring.datasource.driver-class-name=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=
spring.datasource.platform=h2
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect
spring.h2.console.enabled=true
spring.datasource.initialize=true 
spring.error.whitelabel.enabled=true
spring.h2.console.path=/console
spring.jpa.hibernate.ddl-auto=none
spring.datasource.continue-on-error=true
spring.jpa.hibernate.ddl-auto=create
spring.hibernate.hbm2ddl.auto=update
spring.hibernate.show_sql=true

Sie können den Schritten unter dem folgenden Link folgen.

https://springframework.guru/using-the-h2-database-console-in-spring-boot-with-spring-security/

4
kemparaj565

Ich habe festgestellt, dass mit Spring Boot 2.0.2.RELEASE die Konfiguration von Spring-Boot-Starter-data-jpa und com.h2database in der POM-Datei nicht gerade ausreicht, um die H2-Konsole zu verwenden. Sie müssen Spring-Boot-devtools wie folgt konfigurieren ..__ Optional können Sie den Anweisungen von Aaron Zeckoski in diesem Beitrag folgen

  <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-devtools</artifactId>
        <optional>true</optional>
 </dependency>
2
Pragnesh Rana

Verwenden Sie jdbc: h2: mem: testdb als Pfad, wenn Sie sich an der H2-Konsole anmelden. 

Wenn Sie die Spring Boot-Eigenschaften geändert haben, ist Ihre Datenquelle zwar unterschiedlich, aber es scheint, als hätten Sie Schwierigkeiten, den Standard zu finden. Das ist alles dazu! Sie sehen Ihr Schema, nachdem Sie sich bei H2 angemeldet haben.

2
user9023317

Überprüfen Sie die Eigenschaften der Federanwendung

spring.datasource.url = jdbc: h2: mem: testdb; DB_CLOSE_DELAY = -1; DB_CLOSE_ON_EXIT = FALSE

hier ist testdb die Datenbank Stellen Sie sicher, dass die h2-Konsole denselben Wert hat, während andere Verbindungen hergestellt werden. Es wird eine Verbindung mit der Standard-Datenbank hergestellt 

 enter image description here

1
vaquar khan

Ich hatte einen sehr dummen Fehler gemacht, als ich das gleiche Problem hatte. Ich hatte H2 DB für die Ausführung von Unit-Testfällen hinzugefügt und daher die scope in pom.xml auf test gesetzt. Beim Ausführen der Anwendung mit mvn spring:run habe ich die scope entfernt und sie funktioniert jetzt einwandfrei.

1
AbhishekB