servicios servicio que programas para nube mejores mejor guardar espacio cual comprar archivos aplicaciones alternativas almacenamiento java web-applications tomcat java-ee

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



mejor que dropbox (6)

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

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

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

Creo una aplicación web (WAR) y la despliego en Tomcat. En la 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 poner el archivo en algún lugar del árbol de directorios donde se implementa la aplicación en sí. ¿Debería mi archivo de configuración estar en el directorio WEB-INF ? ¿O ponerlo en otro lado?

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


Lo que hacemos es colocarlo en un directorio separado en el servidor (puede usar algo como / config, / opt / config, / root / config, / home / username / config, o cualquier cosa que desee). Cuando nuestros servlets se inician, leen el archivo XML, sacan algunas cosas de él (lo más importante es información de conexión DB), 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 la información de conexión DB en la base de datos.

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

Poner cosas en el archivo WAR parece agradable, 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 sobrescribirá el archivo para que todo lo que no recuerda cambiar en la versión que se integra en el WAR se olvide.

El archivo en un lugar especial en el sistema de archivos funciona bastante bien para nosotros. No tiene grandes inconvenientes. Ya sabes dónde está, se almacena por separado, hace que la implementación en varias máquinas sea fácil si todos necesitan diferentes valores de configuración (ya que no es parte de la GUERRA).

La única otra solución en la que puedo pensar que funcionaría bien sería mantener todo en el DB excepto la información de inicio de sesión de DB. Eso vendría de las propiedades del sistema Java que se recuperan a través de la JVM. Esto es lo de la API de Preferencias mencionado por Hans Doggen arriba. No creo que haya existido cuando nuestra aplicación se desarrolló por primera vez, si fue que 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, solo abre el archivo en "/config/myapp/config.xml" (o lo que sea) y encontrará lo correcto. Solo codificar el camino para esto me parece bastante inofensivo.


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.

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


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


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 / classes.


WEB-INF es un buen lugar para poner 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")