Hibernate JTA: Liest DB Verbindungsparameter pro Umgebung

8

Ich schreibe eine JavaEE-Anwendung mit Hibernate. Die Anwendung läuft in mehreren Umgebungen (dev, qa, prod usw.) & amp; Es werden separate dbs mit jedem von ihnen verbunden sein. Ich würde gerne die Ruhezustand-Eigenschaften wie jdbc-URL, Benutzername, Passwort usw. für jede dieser Umgebungen separat festlegen.

Mein aktuelles persistence.xml sieht folgendermaßen aus:

%Vor%

Ich verwende die Persistenzeinheit wie folgt in meinem Java-Code:

%Vor%

Gibt es eine Möglichkeit, die Hibernate-Eigenschaften, die in separaten Eigenschaftendateien gespeichert sind, in EntityManager für verschiedene Umgebungen zu integrieren?

Bitte beachten Sie, dass ich JTA verwende und daher EntityManagerFactory nicht verwenden kann. Auch ich bin nicht & amp; Ich möchte den Frühling nicht benutzen.

    
Suraj Menon 16.10.2015, 08:48
quelle

5 Antworten

5

Es ist wirklich eine BAAAAAAD-Idee, umweltindividuelle Informationen in das WAR / EAR-Paket Ihrer Anwendung aufzunehmen (entweder durch Einbeziehung mehrerer Konfigurationen oder durch Erstellung verschiedener Bundles für unterschiedliche Umgebungen). Im Container sollte zB eine andere Datenbank gepflegt werden.

In Ihrem Fall sollte Ihr persistence.xml folgendermaßen aussehen:

%Vor%

und natürlich sollten Sie die entsprechende Ressource-Referenz für jdbc/fooAppDs haben.

Dadurch können Sie Ihre Anwendung in jeder Umgebung bereitstellen. Sie müssen nur die richtige Datenquelle in Ihrem Container erstellen und sie jdbc/fooAppDs zuweisen.

Ein anderer Ansatz, den ich glaube, wird funktionieren, obwohl ich nicht empfehlen werde, indem hibernate.cfg.xml im Klassenpfad erstellt wird. Möglicherweise möchten Sie einen lokalen Speicherort für das Dateisystem haben und diesen im Klassenpfad hinzufügen, anstatt die Datei in Ihr JAR / WAR / EAR zu legen.

    
Adrian Shum 19.10.2015 06:25
quelle
1

Da Sie keine externe Bibliothek wie Spring verwenden möchten, um Ihre Persistenzeinheiten zu bootstrappen, sollten Sie Ihr Build-System dazu verwenden. Wenn Sie maven verwenden, können Sie mix Filtern und Profile zum Filtern basierend auf der Eigenschaftendatei oder wenn Sie ein anderes Build-Tool verwenden, können Sie hinzufügen eine Aufgabe (oder ein Äquivalent), um Dateiinhalte von verschiedenen Dateien in die tatsächliche Datei zu kopieren, abhängig von einer externen System- / Umgebungsvariablen.

    
Shailendra 19.10.2015 05:03
quelle
1

Wir haben Property-Dateien für jede Umgebung wie DEV, QA, PROD, UAT usw. in verschiedenen Dateien gespeichert und kopieren eine davon während des Builds.

Ameisen bauen

%Vor%

Run Build wie folgt

%Vor%

Dies kopiert PROD.persistence.xml in persistence.xml

%Vor%

Dadurch wird DEV.persistence.xml in persistence.xml

kopiert     
AGdev 23.10.2015 16:28
quelle
0

Mit Spring Profile können Sie Entity Manager-Beans starten, abhängig vom aktiven Profil, auf das verwiesen wird die persistence.xml wie dev-persistence.xml, test-persisitence.xml, prod-persistence.xml Ihrer Umgebung. Und Sie können aktives Profil mit web.xml einstellen. Meistens ändert sich die web.xml nicht so sehr, so dass Sie die Datei web.xml in Ihrem Repository mit der aktiven Eigenschaft spring profile für diese Umgebung beibehalten können.

    
Ninad Ingole 19.10.2015 05:25
quelle
0

Sie können Ihre Datei spring-config.xml wie folgt konfigurieren

  
  1. MYSQL
  2.   
%Vor%
  

2.Gleich für andere Datenbanken wie oracle, postgre mit anderem Namen der Datenquelle, sessionfactory und transactionmanager.   3. Schließlich können Sie das Objekt der Sitzungsfactory mit dem folgenden sessionfactory-Namen erhalten

%Vor%

ähnlich für andere Datenbank

    
Vasim Akram 23.10.2015 18:42
quelle

Tags und Links