Spring Web Application: etwas beim Start (Initialisierung)

7

Ich möchte beim Start einige Tabellen meiner Datenbank aus einer Textdatei füllen. Ich möchte, dass meine Initialisierungsmethode nur aufgerufen wird, wenn meine Anwendung gestartet wird.

Ich verwende Spring (+ MVC) und Hibernate mit MySQL.

Wie kann ich tun?

    
Fabio B. 13.03.2012, 08:04
quelle

6 Antworten

5

Verwenden Sie die Postconstuct-Annotation irgendwo in einer Bean:

%Vor%

Wahrscheinlich macht (desgin) Sinn, eine Konfigurations-Bean zu verwenden, aber es kann überhaupt irgendeine Bean sein.

    
NimChimpsky 13.03.2012, 08:08
quelle
16

Sie können einen Anwendungs-Listener erstellen, der speziell für solche Anforderungen entwickelt wurde. In diesem Fall wird es jedes Mal ausgeführt, wenn der Kontext gestartet (oder aktualisiert) wird.

%Vor%     
sinuhepop 13.03.2012 08:50
quelle
7

Hibernate enthält eine Möglichkeit, einige Dateien mit SQL-Anweisungen hinzuzufügen, die beim Start ausgeführt werden.

Der Parameter ist hibernate.hbm2ddl.import_files .

@Siehe Hibernate-Referenz: Kapitel 3.4. Optionale Konfigurationseigenschaften

  • Tabelle 3.7. Verschiedene Eigenschaften
  • hibernate.hbm2ddl.import_files:
  

Durch Kommas getrennte Namen der optionalen Dateien, die SQL DML enthalten   Anweisungen, die während der Erstellung der SessionFactory ausgeführt werden. Das ist nützlich   zum Testen oder Demonstrieren: durch Hinzufügen von INSERT-Anweisungen zum Beispiel Sie   kann Ihre Datenbank mit einem minimalen Satz von Daten füllen, wenn dies der Fall ist   bereitgestellt.

     

Die Dateireihenfolge ist wichtig, die Anweisungen einer gegebenen Datei werden vorher ausgeführt   die Anweisungen der folgenden Dateien. Diese Aussagen sind nur   Wird ausgeführt, wenn das Schema erstellt wird, dh wenn hibernate.hbm2ddl.auto gesetzt ist   Erstellen oder Erstellen-Drop.

     

z.B. /humans.sql,/dogs.sql

Ich mag einige Hinweise, dass dies nur funktioniert, wenn der Ruhezustand im 'create' Modus gestartet wird. Aber ich bin mir nicht sicher.

    
Ralph 13.03.2012 08:24
quelle
0

Zwei Optionen,

Erstens: Lassen Sie Hibernate erstellen Sie Ihre ddl jedes Mal, wenn die Dienste gestartet wird (nur für lokale oder dev-Umgebung)

%Vor%

Oder erstellen Sie im Frühjahr eine Bean mit init-faul false und fügen Sie dort die Logik hinzu, um die Datenbank zu erstellen, wenn Sie sie nicht haben oder injizieren Sie Ihr Skript oder tun Sie, was Sie wollen.

%Vor%     
paul 19.03.2013 09:22
quelle
0

Sie können einige Beans in einer Root-Kontext-Konfiguration erstellen - wie

%Vor%

Daher wird beim Start der Methode "methodName" aufgerufen. Wir haben DB-Upgrades auf diese Weise implementiert.

    
Andrew Gans 16.09.2015 10:30
quelle
0

Wenn Sie Ihre Eigenschaft hibernate.hbm2ddl.auto auf create oder create-drop festgelegt haben, können Sie dies am einfachsten tun, indem Sie die Eigenschaft hibernate.hbm2ddl.import_files mit dem SQL-Dateinamen mit SQL-Anweisungen zum Laden Ihrer ursprünglichen Daten in die Datenbank festlegen Schema, z Benutzer der ersten Anwendung.

Das Folgende ist eine Beispielmethode, die ich in meiner Klasse DatabaseConfig habe. Er setzt die Eigenschaft hibernate.hbm2ddl.import_files mit dem SQL-Dateinamen import_initial_data.sql , der SQL-Insert-Anweisungen enthält, um meine Ausgangsdaten in das Datenbankschema zu laden.

%Vor%

Dies ist mein AppUser.java in model Paket:

%Vor%

Abhängigkeit von Maven für lombok :

%Vor%

Die Datei import_initial_data.sql , die ich in resources directory:

habe %Vor%

Und das Ergebnis von * SELECT * FROM appuser; *:

    
Binyamin Regev 08.02.2018 08:22
quelle