Archivo de properties – Remoto x Local

Tengo un file de properties para manejar mi fuente de datos. Este file es cargado por properties maven plugin. Cuando cargué lo uso en el plugin Wildfly Swarm.

database.properties:

database.server=localhost database.server.port=3306 database.name=XXXXXXX database.options= database.user=XXXXXXX database.password=XXXXXXXX database.pool.min=1 database.pool.max=10 database.pool.preFill=true 

Propiedades maven plugin:

 <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>properties-maven-plugin</artifactId> <version>${properties-maven.version}</version> <executions> <execution> <phase>initialize</phase> <goals> <goal>read-project-properties</goal> </goals> </execution> </executions> <configuration> <files> <file>src/main/resources/database.properties</file> </files> </configuration> </plugin> 

Plugin Wildfly Swarm:

 <plugin> <groupId>org.wildfly.swarm</groupId> <artifactId>wildfly-swarm-plugin</artifactId> <version>${version.wildfly.swarm}</version> <configuration> <properties> <swarm.datasources.data-sources.CondominioDs.driver-name>mysql</swarm.datasources.data-sources.CondominioDs.driver-name> <swarm.datasources.data-sources.CondominioDs.connection-url>jdbc:mysql://${database.server}:${database.server.port}/${database.name}${database.options}</swarm.datasources.data-sources.CondominioDs.connection-url> <swarm.datasources.data-sources.CondominioDs.initial-pool-size>${database.pool.min}</swarm.datasources.data-sources.CondominioDs.initial-pool-size> <swarm.datasources.data-sources.CondominioDs.max-pool-size>${database.pool.max}</swarm.datasources.data-sources.CondominioDs.max-pool-size> <swarm.datasources.data-sources.CondominioDs.pool-prefill>${database.pool.preFill}</swarm.datasources.data-sources.CondominioDs.pool-prefill> <swarm.datasources.data-sources.CondominioDs.user-name>${database.user}</swarm.datasources.data-sources.CondominioDs.user-name> <swarm.datasources.data-sources.CondominioDs.password>${database.password}</swarm.datasources.data-sources.CondominioDs.password> <swarm.datasources.data-sources.CondominioDs.check-valid-connection-sql>SELECT 1</swarm.datasources.data-sources.CondominioDs.check-valid-connection-sql> </properties> </configuration> <executions> <execution> <goals> <goal>package</goal> </goals> </execution> </executions> </plugin> 

Todo funciona bien Tanto de forma remota como local.

Yo uso Git también y tengo dos sucursales. Uno (maestro) para actualizar mi repository remoto y otro (desarrollo) para codificar y probar.

Finalmente, uso Heroku para implementar mi aplicación y uso el complemento maven para esto (no git).

Mi pregunta es sobre el file de properties del origen de datos. No sé cómo tener dos versiones de file. Una para usar cuando estoy codificando (localmente) y otra para usar cuando necesito implementar la aplicación en Heroku.

Por supuesto, la dirección, el usuario y la contraseña de la database local son diferentes de la database remota.

En este momento, coloco de forma remota información en el file de properties y lo despliego en Heroku. Luego volví con la información local para continuar con la encoding.

Veo que estás usando el formatting de properties para la configuration; Sugeriría pasar al formatting YAML. Al usar eso, WildFly Swarm admite perfiles de configuration.

En tu caso, que probablemente sea bastante típico, pondría una configuration común en project-defaults.yml , tu configuration local en project-local.yml y tu configuration de producción / Heroku en project-prod.yml (o project-heroku.yml , tu elección). Luego, elige la configuration correcta al ejecutar la aplicación: java -jar myapp-swarm.jar -Slocal (o -Sprod ).

Para get más información, consulte http://docs.wildfly-swarm.io/2017.11.0/#_configuration_of_a_wildfly_swarm_application

Como ya está usando Maven, ¿por qué no utilizar sus capacidades de "filtrado" para proporcionar valores de properties en el momento de la construcción? Seguramente poner nombres de usuario y passwords en el repository de control de código fuente no es una buena idea de todos modos.

En cualquier caso, aunque podrías probar algún tipo de hack basado en sucursales para mantener una versión local y remota del mismo file, no hay realmente una buena manera de garantizar que "permanezcan separados" durante las fusiones necesarias para llevar a cabo otros cambios en las sucursales. .

Por lo tanto, si insistes en usar git como el lugar de almacenamiento para valores de propiedad específicos del entorno, lo mejor que puedes hacer es almacenar la versión de cada entorno con un nombre de file diferente y compensar la diferencia en el process de compilation. (De nuevo, la forma más fácil que puedo pensar de hacer eso con Maven es el filtrado, por lo que aún harías casi todo el trabajo que harías para eliminar por completo los valores del control de fuente …)

Intereting Posts