read from application java maven configuration java-ee-6 properties-file

from - Configurar Java EE 6 para dev/QA/prod



read properties file java from classpath (3)

Tengo una aplicación Java EE 6 que construyo con Maven, código en NetBeans 7 y despliegue en GlassFish 3.1.2. Cuando casi termino, me encuentro implementando versiones de demostración.

El problema es que no tengo ninguna manera fácil de compilar para entornos diferentes como dev, QA, demo, prod, etc. Para algunas cosas, he estado usando una clase Java con un conjunto de getters estáticos que devuelven valores basados ​​en el valor de una constante de entorno. Pero esto no me ayuda con la configuración condicional

  • javax.faces.PROJECT_STAGE (web.xml)
  • credenciales de la base de datos (glassfish-resources.xml)
  • servidores de correo (glassfish-resources.xml)
  • Nivel de registro de JPA (persistence.xml)

y probablemente varias otras cosas en las que no puedo pensar ahora que están dispersas en archivos XML.

¿Hay alguna manera de definir múltiples versiones de estos archivos de configuración y simplemente establecer un indicador en tiempo de compilación para seleccionar el entorno, mientras que el valor predeterminado es dev cuando no se especifica ningún entorno? ¿Hay alguna manera de que pueda hacer que Maven trabaje para mí en este caso?


Esta no es una respuesta directa a la pregunta. Esto explica la estrategia de diff para administrar las propiedades de env Otra forma de administrar las propiedades de diff env es usar la base de datos para almacenar las propiedades. De esta forma, solo necesita administrar la configuración de la base de datos. Con base en qué DB está apuntando, puede cargar las propiedades de ese DB. Si está utilizando primavera y primavera, proporciona PropertyPlaceholderConfigurer, que puede inicializar las propiedades de DB. Este enfoque le permite cambiar el valor de la propiedad sin hacer una compilación.

Este enfoque es útil si desea promocionar el artefacto probado por el equipo QA / Testing. En este caso, la configuración de DB no será parte del artefacto generado por el proceso de compilación.



Puedes usar maven para lograr eso. Especialmente usando el filtrado de recursos .

Primero, puede definir una lista de perfiles:

<profiles> <profile> <id>dev</id> <properties> <env>development</env> </properties> <activation> <activeByDefault>true</activeByDefault> <!-- use dev profile by default --> </activation> </profile> <profile> <id>prod</id> <properties> <env>production</env> </properties> </profile> </profiles>

Luego, los recursos que necesita filtrar:

<build> <outputDirectory>${basedir}/src/main/webapp/WEB-INF/classes</outputDirectory> <filters> <filter>src/main/filters/filter-${env}.properties</filter> <!-- ${env} default to "development" --> </filters> <resources> <resource> <directory>src/main/resources</directory> <includes> <include>**/*.xml</include> <include>**/*.properties</include> </includes> <filtering>true</filtering> </resource> </resources> </build>

Y luego sus propiedades personalizadas basadas en perfiles en el directorio src/main/filters :

filter-development.properties

# profile for developer db.driver=org.hsqldb.jdbcDriver db.url=jdbc:hsqldb:mem:web

y

filter-production.properties

# profile for production db.driver=com.mysql.jdbc.Driver db.url=jdbc:mysql://localhost:3306/web?createDatabaseIfNotExist=true

para usar el perfil de producción, puede empaquetar war usando mvn clean package -Pprod command.

Aquí puede ver el proyecto de muestra que usa el perfil en maven.