Tengo un requisito de acceso a archivo application.properties fuera de la ubicación del proyecto. Soy capaz de lograr lo mismo usando siguiente:
@Component
@PropertySources({
@PropertySource(value = "file:${user.home}/file/path/application.properties", ignoreResourceNotFound = false) })
public class PropConfig implements InitializingBean {
Ahora, quiero lograr lo mismo usando el perfil activo. Si el perfil dev está activo, necesito a buscar application-dev.properties, si el perfil de la etapa está activa, quiero a buscar application-stage.properties y así sucesivamente.
Estoy utilizando la plataforma Windows y JAVA 8 con 1.5.x primavera de arranque
He intentado establecer el perfil activo en el archivo application.properties. Pero no funciona
spring.profiles.active=dev
Solución para la primavera de arranque 1.5.x
Puede añadir la carpeta como un lugar propio de configuración mediante la ejecución de su aplicación con el siguiente argumento JVM:
-Dspring.config.location=file:${user.home}/file/path/
Con este argumento JVM configurado, todos los application-{profile}.properties
archivos dentro de esta carpeta se resolverán automáticamente.
(Alternativamente, si usted prefiere utilizar las variables de entorno en lugar de argumentos de JVM, puede hacer lo mismo mediante el establecimiento de la variable de entorno SPRING_CONFIG_LOCATION, por ejemplo mediante el uso siguiente comando en el terminal de Linux: export SPRING_CONFIG_LOCATION=file:${user.home}/file/path/
)
Ahora, si usted tiene un archivo application-dev.properties
en la carpeta de configuración a medida, que debería ser suficiente para activar el perfil por defecto en su application.properties
archivo agregando:
spring.profiles.active=dev
Por último, la @PropertySources
anotación es redundante y puede eliminarla:
@Component
public class PropConfig implements InitializingBean {
Referencia: https://docs.spring.io/spring-boot/docs/1.5.0.RELEASE/reference/html/boot-features-external-config.html
Solución para la primavera de arranque 2.X
El enfoque es fundamentalmente el mismo que para la primavera de arranque 1.5.x, pero con una ligera diferencia.
En la primavera de arranque 2.X el comportamiento del spring.config.location
argumento es un poco diferente que en versiones anteriores. La diferencia es que en la primavera de arranque 2.X el spring.config.location
argumento anula las ubicaciones de configuración por defecto:
Cuando ubicaciones de configuración personalizados se configuran mediante spring.config.location, que sustituyen a las ubicaciones predeterminadas. (Fuente: Documentación del resorte de arranque )
Desde la creación de este argumento a su carpeta de configuración a medida dejaría sin efecto las ubicaciones predeterminadas (supongo que la pérdida de los archivos de configuración en las ubicaciones de configuración por defecto no es el comportamiento deseado), es mejor utilizar el nuevo spring.config.additional-location
argumento de que no anula sino que sólo se extienden las ubicaciones predeterminadas:
-Dspring.config.additional-location=file:${user.home}/file/path/
(Como alternativa, puede utilizar la variable de entorno SPRING_CONFIG_ADDITIONAL-ubicación si usted prefiere utilizar las variables de entorno en lugar de argumentos de JVM)
Referencia: https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html