Pregunta

Es posible que tenga un conjunto de propiedades que se utilizan en la máquina del desarrollador, que varía de un desarrollador a otro, otro conjunto para un entorno de prueba y otro más para el entorno de producción.

En una aplicación Spring, es posible que también tenga beans que desee cargar en un entorno local pero no en un entorno de producción, y viceversa.

Como manejas esto?¿Utiliza archivos separados, filtrado de recursos ant/maven u otros enfoques?

¿Fue útil?

Solución

Acabo de poner las distintas propiedades en JNDI.De esta manera se puede configurar cada uno de los servidores y puedo tener UN archivo war.Si la lista de propiedades es grande, alojaré los archivos de propiedades (o XML) en otro servidor.Usaré JNDI para especificar la URL del archivo a usar.

Si está creando diferentes archivos de aplicación (war/ear) para cada entorno, entonces no está implementando el mismo war/ear que está probando.

En una de mis aplicaciones, utilizamos varios servicios REST.Acabo de poner la URL raíz en JNDI.Luego, en cada entorno, el servidor se puede configurar para comunicarse con el servicio REST adecuado para ese entorno.

Otros consejos

Simplemente uso diferentes archivos de configuración Spring XML para cada máquina y me aseguro de que todos los bits de datos de configuración que varían entre máquinas estén referenciados por beans que se cargan desde esos archivos de configuración Spring.

Por ejemplo, tengo una aplicación web que se conecta a una interfaz Java RMI de otra aplicación.Mi aplicación obtiene la dirección de la interfaz RMI de esta otra aplicación a través de un bean configurado en el archivo de configuración Spring XML.Tanto mi aplicación como la otra aplicación tienen instancias de desarrollo, prueba y producción, por lo que tengo tres archivos de configuración para mi aplicación: uno que corresponde a la configuración apropiada para la instancia de producción, uno para la instancia de prueba y otro para la instancia de desarrollo. instancia.

Entonces, lo único que necesito tener claro es qué archivo de configuración se implementa en qué máquina.Hasta ahora, no he tenido ningún problema con la estrategia de crear tareas Ant que se encarguen de copiar el archivo de configuración correcto en su lugar antes de generar mi archivo WAR;por lo tanto, en el ejemplo anterior, tengo tres tareas Ant, una que genera el WAR de producción, otra que genera el WAR de desarrollo y otra que genera el WAR de prueba.Las tres tareas se encargan de copiar el archivo de configuración correcto en el lugar correcto y luego ejecutan el mismo paso siguiente, que es compilar la aplicación y crear WAR.

Espero que esto tenga algún sentido...

Usamos archivos de propiedades específicos de los entornos y hacemos que la compilación ant seleccione el conjunto correcto al construir los frascos/guerras.

Las cosas específicas del entorno también se pueden manejar a través del servicio de directorio (JNDI), dependiendo de su servidor de aplicaciones.Usamos Tomcat y nuestro DataSource está definido en la implementación JNDI de solo lectura de Tomcat.Spring hace que la búsqueda sea muy fácil.

También utilizamos la estrategia ant para crear diferentes sitios (contenido diferente, roles de seguridad, etc.) a partir del mismo proyecto fuente.

Hay una cosa que nos causa un pequeño problema con esta estrategia de compilación, y es que a menudo los archivos y directorios no existen hasta que se ejecuta la compilación, por lo que puede dificultar la escritura de verdaderas pruebas de integración (usando el mismo conjunto de primavera). como cuando se implementaron) que se pueden ejecutar desde dentro del IDE.También se pierde parte de la capacidad del IDE para verificar la existencia de archivos, etc.

Utilizo Maven para filtrar los recursos en src/main/resources en mi proyecto.Utilizo esto en combinación con archivos de propiedades para incorporar atributos personalizados en mis proyectos basados ​​en Spring.

Para las compilaciones predeterminadas, tengo un archivo de propiedades en mi directorio de inicio que Maven luego usa como anulaciones (para que cosas como mi instalación local de Tomcat se encuentren correctamente).El servidor de prueba y el servidor de producción son mis otros perfiles.Un simple -Pproduction es todo lo que necesito para crear una aplicación para mi servidor de producción.

Utilice diferentes archivos de propiedades y utilice filtros de reemplazo de hormigas que realizarán el reemplazo según el entorno para el que se realiza la compilación.Ver http://www.devrecipes.com/2009/08/14/environment-specific-configuration-for-java-applications/

Archivos de configuración separados, almacenados en el repositorio de control de código fuente y actualizados manualmente.Normalmente la configuración no cambia radicalmente entre una versión y la siguiente, por lo que la sincronización (incluso manualmente) no es realmente un problema importante.

Para sistemas altamente escalables en entornos de producción, preferiría en serio Recomendamos un esquema en el que los archivos de configuración se guardan en plantillas y, como parte del script de compilación, estas plantillas se usan para representar los archivos de configuración "finales" (todos los entornos deben usar el mismo proceso).

Recientemente también utilicé Maven para configuraciones alternativas para entornos en vivo o de puesta en escena. Configuración de producción usando perfiles Maven..Espero eso ayude.

Utilizo la copia de Ant con un archivo de filtro.En el directorio con el archivo de configuración con variables tengo un directorio con un archivo para cada entorno.El script de compilación conoce el entorno y utiliza el archivo de variables correcto.

Tengo diferentes carpetas de configuración que contienen las configuraciones para la implementación de destino y uso ANT para seleccionar la que usaré durante la etapa de copia del archivo.

Usamos diferentes objetivos de hormigas para diferentes entornos.La forma en que lo hacemos puede ser un poco poco elegante pero funciona.Simplemente le diremos a ciertos objetivos de hormigas que filtren diferentes archivos de recursos (que es como se pueden excluir ciertos beans de la carga), carguen diferentes propiedades de la base de datos y carguen diferentes datos semilla en la base de datos.Realmente no tenemos un 'experto' en hormigas corriendo, pero podemos ejecutar nuestras compilaciones con diferentes configuraciones desde un solo comando.

Una solución que he visto utilizada es configurar el entorno de prueba para que sea idéntico al entorno de producción.Esto significa que cada entorno tiene una VLAN con el mismo rango de IP y roles de máquina en las mismas direcciones IP (p. ej.la IP del clúster de base de datos siempre es 192.168.1.101 en cada entorno).Los firewalls asignaron direcciones externas a los servidores web, por lo que al intercambiar archivos de host en su PC se podría usar la misma URL: http://www.myapp.com/webapp/file.jsp pasaría a preparación o producción, dependiendo del archivo de hosts que haya intercambiado.

No estoy seguro de que esta sea una solución ideal, es bastante complicada de mantener, pero es interesante tenerla en cuenta.

Caleb P y JeeBee probablemente tengan la solución más rápida.Además, no es necesario configurar diferentes servicios ni señalar archivos en diferentes máquinas.Puede especificar su entorno utilizando una variable ${user.name} o especificando el perfil en un argumento -D para Ant o Maven.

Además, en esta configuración, puede tener un archivo de propiedades genérico y archivos de propiedades anulados para entornos específicos.Tanto Ant como Maven admiten estas capacidades.

No olvide investigar PropertyPlaceholderConfigurer; esto es especialmente útil en entornos donde JNDI no está disponible

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