(Ich habe bereits die H2-Datenbank im Speicher gesehen - Init-Schema über Spring / Hibernate- Frage; sie ist hier nicht anwendbar.)
Ich möchte wissen, ob es in H2 eine Einstellung gibt, mit der ich beim Herstellen einer Verbindung automatisch ein Schema erstellen kann. Wenn es hilft, interessiert mich nur der In-Memory-Fall.
H2 unterstützt verschiedene durch Semikolons getrennte Modifikatoren am Ende der URL, aber ich habe keinen gefunden, um automatisch ein Schema zu erstellen. Gibt es eine solche Funktion?
<property name="hibernate.connection.url">jdbc:h2:mem:test;INIT=RUNSCRIPT FROM 'script1.sql'\\\;RUNSCRIPT FROM script2.sql'</property>
Ihre Konfiguration für den Ruhezustand einrichten .;
müsste das nicht entkommen (es gibt ein Unescaped;
vor demINIT
). Könnten Sie versuchen, ob nur ein Backslash funktioniert?'script1.sql'\;RUNSCRIPT...
Wenn Sie spring mit application.yml verwenden, funktioniert Folgendes für Sie
spring: datasource: url: jdbc:h2:mem:mydb;DB_CLOSE_ON_EXIT=FALSE;MODE=PostgreSQL;INIT=CREATE SCHEMA IF NOT EXISTS calendar
quelle
Was Thomas geschrieben hat, ist außerdem korrekt. Wenn Sie mehrere Schemas initialisieren möchten, können Sie Folgendes verwenden. Beachten Sie, dass
\\;
die beiden Anweisungen create getrennt sind.ref: http://www.h2database.com/html/features.html#execute_sql_on_connection
quelle
"Wenn eine Anwendung aufruft
DriverManager.getConnection(url, ...)
und die in der URL angegebene Datenbank noch nicht vorhanden ist, wird standardmäßig eine neue (leere) Datenbank erstellt." - H2-Datenbank .Nachtrag: @Thomas Mueller zeigt, wie SQL bei Verbindung ausgeführt wird , aber manchmal erstelle und fülle ich den Code einfach ein, wie unten vorgeschlagen.
quelle
Wenn Sie Spring Framework mit verwenden
application.yml
und Probleme haben, den Test dazu zu bringen, die SQL-Datei in derINIT
Eigenschaft zu finden, können Sie dieclasspath:
Notation verwenden.Wenn Sie beispielsweise eine
init.sql
SQL-Datei auf der habensrc/test/resources
, verwenden Sie einfach :quelle