Tomcat webapp config aus der WAR-Datei auslagern
Ich habe Probleme mit der Konfiguration einer webapp in tomcat 7. In meiner war-Datei, es ist eine properties-Datei myApp/WEB-INF/classes/myProps.Requisiten, und es enthält Umwelt-spezifische Eigenschaften. Ich versuche zu überschreiben, dass die Konfigurationsdatei auf dem server, so dass die gleiche war-Datei wird implementiert, um mehrere Umgebungen.
Ich habe gehört, es war ein Weg, dies zu tun mit Ersatz-config-Dateien im tomcat/conf/Catalina/myApp. Dies ist die Methode, die ich habe Schwierigkeiten, herauszufinden.
Ebenfalls Anwendung.Krieg ist eine von vielen auf dem gleichen tomcat-server, und es läuft nicht als "localhost". Ich möchte in der Lage sein, dieses problem zu lösen, für mehrere webapps.
Server version: Apache Tomcat/7.0.23
Server built: Nov 20 2011 07:36:25
Server number: 7.0.23.0
OS Name: Linux
InformationsquelleAutor der Frage mfa | 2012-12-19
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ihre
tomcat/conf/Catalina/<host>
enthalten können Kontext-Deskriptoren, mit denen Sie konfigurieren, viele Dinge, einschließlich der Definition von "Umwelt-Einträge", die zugänglich sind, von Java über JNDI. Es gibt viele Wege zu gehen über die Verwendung. Persönlich, habe ich eine Umgebung, Eintrag, ist die Datei system Pfad zu meiner Datei Eigenschaften. Meine app ist gebaut, um zu prüfen, ob diese Eintritt, und wenn es nicht vorhanden ist, suchen Sie nach der Datei auf dem Klassenpfad statt. So, dev, wir haben das dev-Eigenschaften direkt auf den Klassenpfad, aber wenn wir bauen, bereitstellen, weisen wir Sie auf eine externe Datei.Da gibt es eine gute Dokumentation für konfigurieren eines Kontext auf der Tomcat-website. Siehe "Definieren eines Kontexts" auf details, wie die zum erstellen der Datei und wohin damit.
Als ein Beispiel, wenn Ihr host mit dem Namen "myHost" und Ihre app ist eine war-Datei mit dem Namen "myApp.Krieg" in das webapps-Verzeichnis, dann können Sie
tomcat/conf/Catalina/myHost/myApp.xml
mit diesem Inhalt:Dann aus dem code, die Sie tun würde, ein JNDI-lookup auf
java:comp/env/configurationPath
(95% iger Sicherheit hier) zu bekommen, dass string-Wert.InformationsquelleAutor der Antwort Ryan Stewart
Ich mag
.properties
- Dateien anstelle vonjavax.servlet.Filter
javax.servlet.ServletContextListener
die meine unbequem seinTomcat 7 Kontext halten Lader element. Nach docs deployment-Deskriptor (was in
<Context>
- tag) platziert werden können, in:$CATALINA_BASE/conf/server.xml
- bad - erfordern einen server-Neustart, um zu Lesen config$CATALINA_BASE/conf/context.xml
- bad - in allen Anwendungen$CATALINA_BASE/work/$APP.war:/META-INF/context.xml
- bad - Umpacken erforderlich, um die Konfiguration ändern$CATALINA_BASE/work/[enginename]/[hostname]/$APP/META-INF/context.xml
- schönaber siehe Letzte option!!$CATALINA_BASE/webapps/$APP/META-INF/context.xml
- schönaber siehe Letzte option!!$CATALINA_BASE/conf/[enginename]/[hostname]/$APP.xml
- besten - komplett aus der Anwendung und automatisch auf änderungen überprüft!!!Context
halten können benutzerdefinierteLoader
org.apache.catalina.loader.VirtualWebappLoader (in moderne, Tomcat 7, die Sie hinzufügen können eigenen classpath zu Ihrem.properties
), undParameter
(Zugriff überFilterConfig.getServletContext().getInitParameter(name)
) undEnvironment
(Zugriff übernew InitialContext().lookup("java:comp/env").lookup("name")
):Wenn Sie Frühling und die XML-config:
Mit Feder Injektion über Eigenschaften, die in bean-Felder sind einfach:
statt JNDI:
Beachten Sie auch, dass EL dies erlauben (default-Werte und Tiefe rekursive substitution):
Siehe auch:
HINWEIS Mit der Ausweitung classpath zu live-Verzeichnis, das Sie auch dürfen externilize andere configswie die Protokollierung, auth, atc. Ich externilize
logback.xml
so.UPDATE Tomcat 8 ändern Sie die syntax für
<Resources>
und<Loader>
Elemente, entsprechend Teil jetzt so Aussehen:InformationsquelleAutor der Antwort gavenkoa
Können Sie versuchen, um Ihre Konfiguration (properties-Datei) in den Apache-Tomcat\lib in der JAR-Datei und entfernen Sie es von der web-Anwendung. Wenn der Tomcat class loader nicht finden, Ihre config in der webapp wird es versuchen, zu finden im "lib" - Verzeichnis. So können Sie externalisieren Ihre Konfiguration einfach verschieben die config in den globalen lib dir (es ist geteilt zwischen anderen webapps).
InformationsquelleAutor der Antwort bmoc
Habe ich nur noch einen
setenv.bat
odersetenv.sh
Skript in derbin
Ordner von tomcat. Legen Sie dieclasspath
variable wieInformationsquelleAutor der Antwort baliman