sirve que para initcomponents java deployment maven-2 build development-environment

que - Estrategias para la configuración de la aplicación Java



initcomponents java para que sirve (3)

Tenga valores predeterminados en su archivo WAR que correspondan a la configuración de producción, pero permítales ser anulados externamente, por ejemplo, a través de las propiedades del sistema o JNDI.

String uploadLocation = System.getProperty("upload.location", "c:/dev");

(no probado)

Parte de mi aplicación web implica cargar archivos de imagen. En el servidor de producción, los archivos deberán escribirse en / somepath_on_production_server / images. Para desarrollo local, quiero escribir los archivos en / some_different_path / images.

¿Cuál es la mejor manera de manejar estas diferencias de configuración?

Un requisito importante es este: no quiero tener que meterme con el servidor de producción, solo quiero poder implementar un archivo war y hacer que funcione. Así que no quiero usar ninguna técnica que me obligue a meterme con las variables de entorno / classpath / etc. en la máquina de producción. Estoy bien con la configuración de los que en mi máquina local sin embargo.

Soy imaginario dos posibles enfoques generales:

  1. cargando un archivo de configuración especial "dev" en tiempo de ejecución si se cumplen ciertas condiciones (variable de entorno / classpath / etc)
  2. activando un interruptor durante el proceso de construcción (¿quizás los perfiles de maven?)

Usar un archivo de propiedades no es demasiado difícil y es un poco más legible que el web.xml

InputStream ldapConfig = getClass().getResourceAsStream( "/ldap-jndi.properties"); Properties env = new Properties(); try { env.load(ldapConfig); } finally { if (ldapConfig != null) { ldapConfig.close(); } }


Las cosas simples como una String se pueden declarar como entradas de entorno en el web.xml y se pueden obtener a través de JNDI. A continuación, un ejemplo con una env-entry llamada "imagePath".

<env-entry> <env-entry-name>imagePath</env-entry-name> <env-entry-value>/somepath_on_production_server/images</env-entry-value> <env-entry-type>java.lang.String</env-entry-type> </env-entry>

Para acceder a las propiedades desde su código Java, realice una búsqueda JNDI:

// Get a handle to the JNDI environment naming context Context env = (Context)new InitialContext().lookup("java:comp/env"); // Get a single value String imagePath = (String)env.lookup("imagePath");

Esto normalmente se hace en un ServiceLocator antiguo donde se almacena el valor de una clave determinada.

Otra opción sería usar un archivo de propiedades.

Y la forma tradicional de tratar con entornos múltiples generalmente implica perfiles y filtrado (ya sea de un archivo de propiedades o incluso del web.xml ).

Recursos