Frage

Sie können eine Reihe von Eigenschaften aufweisen, die auf der Entwicklermaschine verwendet wird, die vom Entwickler zu Entwickler variiert, einen anderen Satz für eine Staging-Umgebung, und eine weitere für die Produktionsumgebung.

In einer Feder Anwendung können Sie auch Bohnen, die Sie in einer lokalen Umgebung laden mögen, aber nicht in einer Produktionsumgebung, und umgekehrt.

Wie das Sie behandeln? Haben Sie verwenden separate Dateien, ant / maven Ressource Filterung oder andere Ansätze?

War es hilfreich?

Lösung

Ich habe nur die verschiedenen Eigenschaften in JNDI. Auf diese Weise jeder der Server kann so konfiguriert werden, und ich kann ONE WAR-Datei haben. Wenn die Liste der Eigenschaften groß ist, dann werde ich die Eigenschaften Host (oder XML-Dateien) auf einem anderen Server. Ich werde JNDI verwenden die URL der Datei angeben, zu verwenden.

Wenn Sie verschiedene App-Dateien erstellen (Kriegs- / Ohr) für jede Umgebung, dann sind Sie nicht das gleiche Krieg / Ohr bereitstellen, die Sie testen.

In einem meinem apps verwenden wir mehr REST-Service. Ich habe nur die Root-URL in JNDI. Dann in jeder Umgebung, kann der Server konfiguriert sein, mit dem richtigen REST-Service für diese Umgebung zu kommunizieren.

Andere Tipps

Ich verwende nur verschiedene Spring-XML-Konfigurationsdateien für jede Maschine und stellen Sie sicher, dass alle Bits von Konfigurationsdaten, die zwischen Maschinen variieren wird von Bohnen verwiesen, die aus diesen Spring-Konfigurationsdateien laden.

Zum Beispiel habe ich ein Webapp, die zu einer Java RMI-Schnittstelle von einer anderen App verbindet. Meine app wird die Adresse dieses anderen App-RMI-Schnittstelle über eine Bohne, die in der Spring-XML-Konfigurationsdatei konfiguriert ist. Sowohl meine App und die andere app Entwickler, Test- und Produktionsinstanzen, so habe ich drei Konfigurationsdateien für meine app - eine, die für die Herstellung beispielsweise eine für die Testinstanz, und eine für die Entwickler der Konfiguration angemessen entspricht Beispiel.

Dann das einzige, was ich brauche, gerade zu halten ist die Konfigurationsdatei, die Maschine eingesetzt wird. Bisher habe ich keine Probleme mit der Strategie der Schaffung von Ant Aufgaben hatte, die Datei in Position zu kopieren die korrekten Konfiguration behandeln, bevor meine WAR-Datei zu erzeugen; So wird in dem obigen Beispiel, ich habe drei Ant Aufgaben, eine, die die Produktion IST erzeugt, eine, die der Entwickler IST erzeugt, und eine, die der Test IST erzeugt. Alle drei Aufgaben Griff Kopieren der richtigen Konfigurationsdatei an die richtige Stelle, und dann den gleichen nächsten Schritt aufrufen, die die App kompiliert und Erstellen der WAR.

Hope dies macht einen Sinn ...

Wir verwenden Eigenschaften den Umgebungen spezifische Dateien und haben die Ameise Build den richtigen Satz wählen, wenn die Gläser Bau / Kriege.

Umwelt bestimmte Dinge können auch über den Verzeichnisdienst (JNDI), abhängig von Ihrem Anwendungsserver behandelt werden. Wir verwenden tomcat und unsere Datasource in Tomcat nur lesen JNDI-Implementierung definiert. Frühling macht die Suche sehr einfach.

Wir verwenden auch die Ameise Strategie für den Aufbau von verschiedenen Standorten (differeing Inhalt, Sicherheitsrollen, etc.) aus dem gleichen Quelle Projekt auch.

Es gibt eine Sache, die uns eine wenig Mühe mit dieser Build-Strategie bewirkt, und das ist, dass häufig Dateien und Verzeichnisse nicht existieren, bis der Build ausgeführt wird, so kann es macht es schwierig, eine echte Integration Tests zu schreiben (mit dem gleiche Feder aufgebaut wie beim Einsatz), die von innerhalb der IDE runnable ist. Sie verpassen auch auf einige der Fähigkeit des IDE heraus für die Existenz von Dateien zu überprüfen, etc.

ich Maven verwenden, um die Ressourcen, um herauszufiltern unter src / main / resources in meinem Projekt. Ich benutze dies in Kombination mit Eigenschaftsdateien in kundenspezifischen Attributen in meinem Frühjahr-basierten Projekte zu ziehen.

Für Standard baut, ich habe eine Eigenschaft in meinem Home-Verzeichnis-Datei, die Maven dann als Überschreibungen verwendet (so Dinge wie meine lokalen Tomcat Installation gefunden werden korrekt). Testserver und Produktionsserver sind meine anderen Profile an. Eine einfache -Pproduction ist alles was man braucht dann einen Antrag auf meine Produktionsserver zu bauen.

verschiedene Eigenschaften von Dateien verwenden und ant Filter ersetzen, die den Austausch auf der Umwelt basierte tun, für die die Build erfolgt. Siehe http: //www.devrecipes. com / 2009/08/14 / umgebungsspezifische-Konfiguration-for-java-Anwendungen /

Separate Konfigurationsdateien, in dem Quellcodeverwaltungsrepository gespeichert und von Hand aktualisiert. Typischerweise radikal (von Hand selbst) zwischen einer Version und dem nächst so Synchronisation ist ein wichtiges Thema nicht wirklich keine Konfiguration ändern.

Für hoch skalierbare Systeme in Produktionsumgebungen würde ich ernst empfehlen, ein Schema, in dem die Konfigurationsdateien in Vorlagen gehalten werden, und als Teil der Build-Skript werden diese Vorlagen verwendet „final“ Konfigurationsdateien zu machen (alle Umgebungen sollten den gleichen Prozess verwendet werden).

Ich habe vor kurzem auch Maven für alternative Konfigurationen für Live- oder Staging-Umgebungen eingesetzt. Produktion Konfiguration Maven Profile verwenden. Hoffe, es hilft.

Ich verwende Ant-Kopie mit einer Filterdatei. In dem Verzeichnis mit der Konfigurationsdatei mit Variablen habe ich ein Verzeichnis mit einer Datei für jede Umgebung. Der Build-Skript kennt die env und verwendet die richtige Variable-Datei.

Ich habe verschiedene Konfigurationsordner, die Konfigurationen der Zieleinsatz halten, und ich verwende ANT den einen auszuwählen, die während der Dateikopierstufe zu verwenden.

Wir verwenden verschiedene Ameisen Ziele für verschiedene Umgebungen. Die Art, wie wir es tun kann etwas unelegant sein, aber es funktioniert. Wir werden nur bestimmte Ameise Ziele sagen zu verschiedenen Ressourcendateien herausfiltern (das ist, wie Sie bestimmen Bohnen dessen Laden ausschließen könnten), verschiedene Datenbankeigenschaften laden, und verschiedene Samen Daten in die Datenbank geladen werden. Wir wissen nicht wirklich eine Ameise ‚Experten‘ haben rund laufen, aber wir sind in der Lage mit verschiedenen Konfigurationen von einem einzigen Befehl unserer Builds auszuführen.

Eine Lösung, die ich verwendet habe gesehen, ist die Staging-Umgebung zu konfigurieren, dass sie in der Produktionsumgebung identisch ist. Das bedeutet, jede Umgebung ein VLAN mit dem gleichen IP-Bereich hat, und Maschinenrollen auf den gleichen IP-Adressen (beispielsweise die Cluster-IP-db ist immer 192.168.1.101 in jeder Umgebung). Die Firewalls External Facing-Adressen zu den Web-Servern zugeordnet, so durch die Host-Dateien auf Ihrem PC die gleiche URL Swapping verwendet werden könnte - http://www.myapp.com/webapp/file.jsp entweder Inszenierung oder Produktion gehen, je nachdem, welche Hosts Datei, die Sie in getauscht hatten.

Ich bin nicht sicher, dies eine ideale Lösung ist es ziemlich knifflig ist zu halten, aber es ist interessant zu bemerken.

Caleb P und JeeBee wahrscheinlich haben Sie Ihre schnellste Lösung. Außerdem müssen Sie nicht auf Setup verschiedene Dienste oder zeigen Sie auf Dateien auf verschiedenen Rechnern. Sie können Ihre Umgebung entweder durch Verwendung eines $ {user.name} Variable oder durch die Angabe des Profils in einem Argument -D für Ant oder Maven angeben.

Zusätzlich in diesem Setup können Sie eine generischen Eigenschaften-Datei und übergeordnete Eigenschaftendateien für die spezifischen Umgebungen. Sowohl Ant und Maven unterstützen diese Funktionen.

Vergessen Sie nicht, PropertyPlaceholderConfigurer zu untersuchen - dies ist besonders nützlich in Umgebungen, in denen JNDI nicht verfügbar ist

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top