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:
- cargando un archivo de configuración especial "dev" en tiempo de ejecución si se cumplen ciertas condiciones (variable de entorno / classpath / etc)
- 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
).