Configure Tomcat para usar el archivo de propiedades para cargar información de conexión de BD

¿Cuáles son las prácticas aceptadas para crear una implementación de Tomcat que lee los parámetros de configuración de un archivo de propiedades?

Sería bueno poder entregar un archivo WAR y especificar que el cliente solo necesita crear o editar un archivo de propiedades en un directorio específico. ¿Es esta una forma algo regular de hacer las cosas? ¿Hay un mejor enfoque que esto?

A menudo distribuimos webapps al proporcionar un GUERRA y un archivo XML de contexto, que se coloca en el directorio tomcat/conf/Catalina/localhost , y puede cargar la aplicación web desde cualquier ruta. Hay un documento de referencia aquí . Esto proporciona las siguientes ventajas:

  • Los parámetros de contexto se pueden configurar aquí y leer por la aplicación web
  • DataSources se puede definir y configurar aquí
  • El WAR puede vivir en cualquier lugar del sistema de archivos, lo que significa que si Tomcat se actualiza, solo este único archivo de configuración debe trasladarse a la nueva instalación de Tomcat, la aplicación web y cualquier otro archivo pueden permanecer donde están.

Si realmente desea un archivo de propiedades, puede establecer un parámetro en el archivo XML de contexto que apunta a su archivo de propiedades, leer el parámetro en un ServletContextListener y luego leer en el archivo de propiedades.

La forma en que manejamos esto:

  1. Haga que el cliente cree un grupo de conexiones en GlobalNamingResources usando un nombre de recurso en el que estamos de acuerdo. El controlador de la base de datos debe estar en el classpath de Tomcat.
  2. Nuestro archivo war incluye un archivo META-INF / context.xml que tiene un enlace ResourceLink al grupo de conexiones configurado en el paso 1.

Este es un trabajo un poco más adelantado que simplemente alterar la información de conexión context.xml directamente, pero con el tiempo debería dar sus frutos. Un servidor de desarrollo se configuraría con GlobalNamingResources apuntando al desarrollo y un servidor de prueba para probar, etc. Luego, el mismo archivo WAR se puede copiar en cada servidor sin editar nada.

Esto no usa archivos de propiedades, pero creo que logra el mismo objective. Permitir que un usuario / cliente configure la información de conexión de la base de datos.

Ejemplo de GlobalNamingResource:

  

Ejemplo de context.xml en el archivo war:

    

Es una buena práctica almacenar la configuración fuera de la zona de guerra. En nuestra GUERRA, tenemos una ubicación predeterminada para buscar el archivo de propiedad. Si el valor predeterminado no funciona, puede especificar la ubicación a través de un parámetro JVM o un parámetro de contexto definido en el fragmento de contexto en el directorio conf / Catalina / [host]. Por ejemplo,