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:
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.
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:
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.
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.
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 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.
Sie können Ihre Datei spring-config.xml wie folgt konfigurieren
%Vor%
- MYSQL
%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
ähnlich für andere Datenbank