¿Cuál es el mejor lugar para almacenar un archivo de configuración en una aplicación web Java (WAR)?

StackOverflow https://stackoverflow.com/questions/96247

Pregunta

Creo una aplicación web (WAR) y la implemento en Tomcat.En el Aplicación Web hay una página con un formulario donde un administrador puede ingresar algunos datos de configuración.No quiero almacenar estos datos en un DBMS, sino solo en un archivo XML en el sistema de archivos.¿Dónde ponerlo?

Me gustaría colocar el archivo en algún lugar del árbol de directorios donde se implementa la aplicación.¿Mi archivo de configuración debería estar en el WEB-INF ¿directorio?¿O ponerlo en otro lugar?

¿Y cuál es el código Java a utilizar en un servlet para encontrar la ruta absoluta del directorio?¿O se puede acceder a él con una ruta relativa?

¿Fue útil?

Solución

Lo que hacemos es colocarlo en un directorio separado en el servidor (puedes usar algo como /config, /opt/config, /root/config, /home/username/config, o lo que quieras).Cuando nuestros servlets se inician, leen el archivo XML, obtienen algunas cosas de él (lo más importante, información de conexión a la base de datos), y eso es todo.

Pregunté por qué hicimos esto una vez.

Sería bueno almacenar todo en la base de datos, pero obviamente no se puede almacenar información de conexión de base de datos en la base de datos.

Podrías codificar cosas en el código, pero eso es feo por muchas razones.Si la información alguna vez tiene que cambiar, debe reconstruir el código y volver a implementarlo.Si alguien obtiene una copia de su código o su archivo WAR, obtendrá esa información.

Poner cosas en el archivo WAR parece bueno, pero si quieres cambiar mucho las cosas, podría ser una mala idea.El problema es que si tiene que cambiar la información, la próxima vez que la vuelva a implementar se sobrescribirá el archivo, por lo que se olvidará cualquier cosa que no haya recordado cambiar en la versión integrada en WAR.

El archivo en un lugar especial en el sistema de archivos funciona bastante bien para nosotros.No tiene grandes desventajas.Usted sabe dónde está, se almacena por separado, lo que facilita la implementación en varias máquinas si todas necesitan diferentes valores de configuración (ya que no es parte de WAR).

La única otra solución que se me ocurre y que funcionaría bien sería mantener todo en la base de datos excepto la información de inicio de sesión de la base de datos.Eso vendría de las propiedades del sistema Java que se recuperan a través de la JVM.Esta es la API de Preferencias mencionada por Hans Doggen anteriormente.No creo que existiera cuando se desarrolló nuestra aplicación por primera vez, si lo fue, no se usó.

En cuanto a la ruta para acceder al archivo de configuración, es solo un archivo en el sistema de archivos.No necesita preocuparse por la ruta web.Entonces, cuando su servlet se inicia, simplemente abre el archivo en "/config/myapp/config.xml" (o lo que sea) y encontrará lo correcto.Simplemente codificar el camino para este me parece bastante inofensivo.

Otros consejos

WEB-INF es un buen lugar para colocar su archivo de configuración.Aquí hay un código para obtener la ruta absoluta del directorio desde un servlet.

public void init(ServletConfig servletConfig) throws ServletException{
    super.init(servletConfig);
    String path = servletConfig.getServletContext().getRealPath("/WEB-INF")

poniéndolo en WEB-INF ocultará el archivo XML a los usuarios que intenten acceder a él directamente a través de una URL, así que sí, diría que lo pongan en WEB-INF.

No lo almacenaría en la carpeta de la aplicación porque eso anularía la configuración con una nueva implementación de la aplicación.

Le sugiero que eche un vistazo a la API de Preferencias o escriba algo en la carpeta de usuarios (el usuario que ejecuta Tomcat).

La respuesta a esto depende de cómo pretenda leer y escribir ese archivo de configuración.

Por ejemplo, el marco Spring le brinda la capacidad de utilizar archivos de configuración XML (o archivos de propiedades de Java);estos se pueden almacenar en su classpath (por ejemplo, en el directorio WEB-INF), en cualquier otro lugar del sistema de archivos o incluso en la memoria.Si usara Spring para esto, entonces el lugar más fácil para almacenar el archivo de configuración es en su directorio WEB-INF y luego use Spring ClassPathXmlApplicationContext class para acceder a su archivo de configuración.

Pero nuevamente, todo depende de cómo planeas acceder a ese archivo.

Si es su configuración personalizada, WEB-INF es un buen lugar para ello.Pero algunas bibliotecas pueden requerir que las configuraciones residan en WEB-INF/clases.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top