Een externe map toevoegen aan Tomcat classpath

Ik heb een map in mijn C:-station als C:\app_config\java_app
Deze map bevat enkele landspecifieke eigenschappenbestanden.

Ik heb een Java-klasse (PrjPropertilesLocator) die de eigenschappenbestanden laadt op basis van de standaardlandinstelling bij het opstarten van de web-app. Mijn webtoepassing wordt uitgevoerd in tomcat.
Het probleem is hoe ik deze map C:\app_config\java_appin het tomcat-klassenpad moet instellen, zodat deze beschikbaar wordt voor de ResourceBundle in de klasse PrjPropertilesLocator.
Is er een manier waarop ik deze map specifiek kan instellen voor een enkele web-app die deze nodig heeft. Ik wil de eigenschappenbestanden niet in de map WEB-INF/classesplaatsen.

Op weblogic werkt dit prima. Ik heb de map in het weblogic classpath ingesteld in een van de opstartscripts en het werkt prima.
Maar op Tomcat heb ik geprobeerd het in startup.batte plaatsen, ook in setclasspath.bat, maar het lukte niet.


Antwoord 1, autoriteit 100%

Geef het gewoon op in de eigenschap shared.loaderof common.loadervan /conf/catalina.properties.


Antwoord 2, autoriteit 24%

Zie ook vraag: Kan ik een aangepast klassenpad maken per applicatie in Tomcat

Tomcat 7 Contexthoudt Loader-element. Volgens docsimplementatiedescriptor (wat in <Context>tag) kan worden geplaatst in:

  • $CATALINA_BASE/conf/server.xml– slecht – herstart van de server vereist om de configuratie opnieuw te lezen
  • $CATALINA_BASE/conf/context.xml– slecht – gedeeld door alle applicaties
  • $CATALINA_BASE/work/$APP.war:/META-INF/context.xml– slecht – moet opnieuw worden verpakt om de configuratie te wijzigen
  • $CATALINA_BASE/work/[enginename]/[hostname]/$APP/META-INF/context.xmlleuk, maar zie laatste optie!!
  • $CATALINA_BASE/webapps/$APP/META-INF/context.xmlleuk, maar zie laatste optie!!
  • $CATALINA_BASE/conf/[enginename]/[hostname]/$APP.xmlbest– volledig buiten toepassing en automatisch gescand op wijzigingen!!!

Hier mijn configuratie die laat zien hoe de ontwikkelingsversie van projectbestanden uit de $CATALINA_BASE-hiërarchie moet worden gebruikt (merk op dat ik dit bestand in de map src/test/resourcesplaats en Maven instrueren om ${basedir}tijdelijke aanduidingen voor te verwerken via pom.xml<filtering>true</filtering>dus na het inbouwen van een nieuwe omgeving heb ik kopieer het naar $CATALINA_BASE/conf/Catalina/localhost/$APP.xml):

<Context docBase="${basedir}/src/main/webapp"
         reloadable="true">
    <!-- http://tomcat.apache.org/tomcat-7.0-doc/config/context.html -->
    <Resources className="org.apache.naming.resources.VirtualDirContext"
               extraResourcePaths="/WEB-INF/classes=${basedir}/target/classes,/WEB-INF/lib=${basedir}/target/${project.build.finalName}/WEB-INF/lib"/>
    <Loader className="org.apache.catalina.loader.VirtualWebappLoader"
            virtualClasspath="${basedir}/target/classes;${basedir}/target/${project.build.finalName}/WEB-INF/lib"/>
    <JarScanner scanAllDirectories="true"/>
    <!-- Use development version of JS/CSS files. -->
    <Parameter name="min" value="dev"/>
    <Environment name="app.devel.ldap" value="USER" type="java.lang.String" override="true"/>
    <Environment name="app.devel.permitAll" value="true" type="java.lang.String" override="true"/>
</Context>

update Tomcat 8 Syntaxis wijzigen voor <Resources>en <Loader>elementen, corresponderende onderdeel Look nu:

<Resources>
    <PostResources className="org.apache.catalina.webresources.DirResourceSet"
                   webAppMount="/WEB-INF/classes" base="${basedir}/target/classes" />
    <PostResources className="org.apache.catalina.webresources.DirResourceSet"
                   webAppMount="/WEB-INF/lib" base="${basedir}/target/${project.build.finalName}/WEB-INF/lib" />
</Resources>

3, Autoriteit 10%

In Tomcat 6 wordt het klassenpad in uw omgeving genegeerd. In SetClasspath.bat zie je

set CLASSPATH=%JAVA_HOME%\lib\tools.jar

Dan in Catalina.bat, wordt het gebruikt alsof

%_EXECJAVA% %JAVA_OPTS% %CATALINA_OPTS% %DEBUG_OPTS% 
-Djava.endorsed.dirs="%JAVA_ENDORSED_DIRS%" -classpath "%CLASSPATH%" 
-Dcatalina.base="%CATALINA_BASE%" -Dcatalina.home="%CATALINA_HOME%" 
-Djava.io.tmpdir="%CATALINA_TMPDIR%" %MAINCLASS% %CMD_LINE_ARGS% %ACTION%

Ik zie geen andere vars die zijn opgenomen, dus ik denk dat je vastzit met het bewerken van SetClasspath.bat en het veranderen van hoe het klassenpad is gebouwd. Voor Tomcat 6.0.20 was deze verandering op 74 van SetClasspath.bat

set CLASSPATH=C:\app_config\java_app;%JAVA_HOME%\lib\tools.jar

4, Autoriteit 2%

U kunt een nieuw bestand, SETV.SH (of SETV.BAT) in Tomcats Bin-map maken en de volgende regel daar toevoegen

export CLASSPATH=$CLASSPATH:/XX/xx/PATH_TO_DIR

5

Ik ben misschien een beetje laat voor het feest, maar ik volg onderstaande stappen om het volledig te configureren met behulp van de manier van intellijst van In-IDE-app. Ik geloof dat de beste manier om mee te gaan is om hieronder te combineren met het antwoord van @ Belusc.

1. run the application using IDE's tomcat run config. 
2. ps -ef | grep -i tomcat //this will give you a good idea about what the ide doing actually.
3. Copy the -Dcatalina.base parameter value from the command. this is your application specific catalina base. In this folder you can play with catalina.properties, application root path etc.. basically everything you have been doing is doable here too. 

Other episodes