Ich habe einen Ordner in meinem Laufwerk C: as C:\app_config\java_app
Dieser Ordner enthält einige länderspezifische Eigenschaftendateien.
Ich habe eine Java-Klasse ( PrjPropertilesLocator
), die die Eigenschaftendateien basierend auf dem Standardgebietsschema beim Start der Webanwendung lädt. Meine Webanwendung wird in Tomcat ausgeführt. Das Problem ist, wie ich dieses Verzeichnis C:\app_config\java_app
im Tomcat-Klassenpfad festlegen soll , damit es für das ResourceBundle innerhalb der PrjPropertilesLocator
Klasse verfügbar wird . Gibt es eine Möglichkeit, diesen Ordner speziell für eine einzelne Webanwendung festzulegen, die ihn benötigt? Ich möchte die Eigenschaftendateien nicht in einem WEB-INF/classes
Ordner ablegen .
Auf Weblogic läuft dies einwandfrei. Ich habe das Verzeichnis innerhalb des Weblogic-Klassenpfads in einem seiner Startskripte festgelegt und es funktioniert einwandfrei. Aber bei Tomcat habe ich versucht, es startup.bat
auch einzubauen, konnte es setclasspath.bat
aber nicht erfolgreich.
Antworten:
Geben Sie es einfach in
shared.loader
oder in dercommon.loader
Eigenschaft von an/conf/catalina.properties
.quelle
Siehe auch Frage: Kann ich in Tomcat pro Anwendung einen benutzerdefinierten Klassenpfad erstellen?
Tomcat 7 Context Hold Loader- Element. Laut Docs kann der Deployment Descriptor (was in
<Context>
Tag) platziert werden in:$CATALINA_BASE/conf/server.xml
- schlecht - Server muss neu gestartet werden, um die Konfiguration erneut zu lesen$CATALINA_BASE/conf/context.xml
- schlecht - für alle Anwendungen freigegeben$CATALINA_BASE/work/$APP.war:/META-INF/context.xml
- schlecht - muss neu gepackt werden, um die Konfiguration zu ändern$CATALINA_BASE/work/[enginename]/[hostname]/$APP/META-INF/context.xml
- schön , aber siehe letzte Option !!$CATALINA_BASE/webapps/$APP/META-INF/context.xml
- schön , aber siehe letzte Option !!$CATALINA_BASE/conf/[enginename]/[hostname]/$APP.xml
- am besten - komplett außer Anwendung und automatisch nach Änderungen durchsucht !!!Hier meine Konfiguration, die zeigt, wie die Entwicklungsversion von Projektdateien außerhalb der
$CATALINA_BASE
Hierarchie verwendet wird (beachten Sie, dass ich diese Datei insrc/test/resources
dir und intruct Maven platziere, um${basedir}
Platzhalter vorzuverarbeiten,pom.xml
<filtering>true</filtering>
damit ich sie nach dem Erstellen einer neuen Umgebung kopiere$CATALINA_BASE/conf/Catalina/localhost/$APP.xml
):UPDATE Tomcat 8 Änderungssyntax für
<Resources>
und<Loader>
Elemente, entsprechender Teil sieht nun so aus:quelle
In Tomcat 6 wird der CLASSPATH in Ihrer Umgebung ignoriert. In setclasspath.bat sehen Sie
dann wird es in Catalina.bat so verwendet
Ich sehe keine anderen Variablen, die enthalten sind. Ich denke, Sie müssen setclasspath.bat nicht mehr bearbeiten und die Erstellung von CLASSPATH ändern. Für Tomcat 6.0.20 war diese Änderung wie 74 von setclasspath.bat
quelle
Ich schlage vor, Sie fügen ein
META-INF
Verzeichnis mit einerMANIFEST.MF
Datei in der .war-Datei hinzu.Bitte beachten Sie, dass es sich laut Servlet-Spezifikation um eine .war-Datei und nicht um ein .war-Verzeichnis handeln muss, damit der
META-INF/MANIFEST.MF
Container sie lesen kann.Bearbeiten Sie die
MANIFEST.MF
Class-Path-Eigenschaft wie folgtC:\app_config\java_app
:Siehe Verwenden von JAR-Dateien: Die Grundlagen (Das Manifest verstehen)
Genießen.
quelle
jar
, aber nicht für meine Webanwendung.Sie können eine neue Datei, setenv.sh (oder setenv.bat), im Verzeichnis tomcats bin erstellen und dort die folgende Zeile hinzufügen
quelle
Ich bin vielleicht etwas spät dran für die Party, aber ich folge den folgenden Schritten, um sie mithilfe des IntelliJ-In-IDE-App-Tests vollständig konfigurierbar zu machen. Ich glaube, der beste Weg ist, unten mit der Antwort von @ BelusC zu kombinieren.
quelle