java - Agregar recursos externos a la ruta de clases en Tomcat 8
jsp (3)
Tengo una aplicación Tomcat que necesita hacer referencia a algunos archivos de propiedades que son externos a la aplicación. Generalmente, estos se almacenan en una máquina local en un lugar específico como C:/PROJECT_NAME/conf/
.
En Tomcat 7 esto se pudo lograr colocando un archivo context.xml
dentro de /META-INF/
que usó un VirtualWebappLoader
para agregar esencialmente esta ubicación a la ruta de VirtualWebappLoader
de la aplicación de la siguiente manera:
<Context>
<Loader className="org.apache.catalina.loader.VirtaulWebappLoader"
virtualClasspath="/PROJECT_NAME/conf"
searchVirtualFirst="true" />
</Context>
¿Cómo logro esto mismo en Tomcat 8?
Hay una sección sobre esto en la guía de migración de Tomcat 8 que le indicará que use una configuración de recursos.
En particular, creará un objeto WebResourceRoot que contiene el siguiente texto en su descripción.
VirtualWebappLoader - Reemplazado por Pre y Post-Recursos asignados a WEB-INF / lib y WEB-INF / classes
Tu nuevo context.xml se verá similar al siguiente:
<Context>
<Resources className="org.apache.catalina.webresources.StandardRoot">
<PreResources className="org.apache.catalina.webresources.DirResourceSet"
base="C://PROJECT_NAME//conf"
internalPath="/"
webAppMount="/WEB-INF/classes" />
</Resources>
</Context>
Simplemente copie los archivos de propiedades en la carpeta lib de Tomcat.
O mejorar conf / catalina.properties: common.loader
con una carpeta para los archivos de propiedades como se describe aquí:
Solo otro ejemplo:
Tenga en cuenta los comentarios en el interior y tenga en cuenta que utilicé PostResources
y no PreResources
para poder anular las clases en mi proyecto actual si no estoy satisfecho con mi implementación "util". No estoy realmente seguro de si JarResource
se trata como "PostResource" o "PreResource", pero la anulación del contenido estático y las clases funciona.
<!--
https://tomcat.apache.org/tomcat-8.0-doc/config/resources.html
http://.com/questions/23143697/adding-external-resources-to-class-path-in-tomcat-8
http://.com/questions/34515852/tomcat-7-application-migration-to-tomcat-8
http://mikusa.blogspot.co.za/2014/07/tips-on-migrating-to-tomat-8-resources.html
-->
<Context path="/MY_PROJECT" docBase="/MY_PROJECT">
<Resources className="org.apache.catalina.webresources.StandardRoot">
<!-- Post-load the static content from my util project -->
<PostResources className="org.apache.catalina.webresources.DirResourceSet"
base="/workspace/MY_UTIL_PROJECT/WebContent"
webAppMount="/">
</PostResources>
<!-- Post-load the classes from my util project -->
<PostResources className="org.apache.catalina.webresources.DirResourceSet"
base="/workspace/MY_UTIL_PROJECT/WebContent/WEB-INF/classes"
webAppMount="/WEB-INF/classes">
</PostResources>
<!-- Load the JARs contained within my util project -->
<JarResources className="org.apache.catalina.webresources.DirResourceSet"
base="/workspace/MY_UTIL_PROJECT/WebContent/WEB-INF/lib"
webAppMount="/WEB-INF/lib">
</JarResources>
</Resources>
</Context>