java - run - spring boot starter web
Establecer el perfil activo y la ubicación de configuración desde la línea de comandos en el arranque de primavera (9)
Tengo una aplicación de arranque de primavera.
Tengo tres perfiles en mi aplicación-> desarrollo, puesta en escena y producción . Entonces tengo 3 archivos
- application-development.yml
- application-staging.yml
- application-production.yml
Mi
application.yml
reside dentro de
src/main/resources
.
He configurado el perfil activo en application.yml como:
spring:
profiles.active: development
Los otros 3 archivos de configuración específicos del perfil están presentes en la carpeta
C:/config
.
Estoy usando el complemento gradle para eclipse. Cuando intento hacer un " bootRun ", estoy configurando los argumentos de la línea de comandos en mi configuración de gradle en eclipse como
-Dspring.profiles.active=staging -Dspring.config.location=C:/Config
Sin embargo, la propiedad de la línea de comandos no se refleja y mi perfil activo siempre se configura como desarrollo (que es el que he mencionado en el archivo aplicaciones.yml). Además, la carpeta C: / Config no busca archivos de configuración específicos del perfil.
Creo que me estoy perdiendo algo aquí. He estado tratando de resolverlo durante los últimos 2 días. Pero sin suerte. Realmente apreciaria cualquier ayuda.
Al configurar el perfil a través del
complemento Maven
, debe hacerlo a través de
run.jvmArguments
mvn spring-boot:run -Drun.jvmArguments="-Dspring.profiles.active=production"
Con opción de depuración:
mvn spring-boot:run -Drun.jvmArguments="-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005 -Dspring.profiles.active=jpa"
He visto este viaje a mucha gente ... espero que ayude
Creo que su problema probablemente esté relacionado con su ubicación spring.config.location no termina la ruta con "/".
Cita los documentos
Si spring.config.location contiene directorios (a diferencia de los archivos), deben terminar en / (y se agregarán con los nombres generados desde spring.config.name antes de cargarse).
Hay dos formas diferentes de agregar / anular propiedades de resorte en la línea de comando.
Opción 1: Propiedades del sistema Java (argumentos de VM)
Es importante que los parámetros -D estén antes de su application.jar, de lo contrario no se reconocerán.
java -jar -Dspring.profiles.active=prod application.jar
Opción 2: argumentos del programa
java -jar application.jar --spring.profiles.active=prod --spring.config.location=c:/config
Hay otra forma de configurar la variable del sistema operativo , SPRING_PROFILES_ACTIVE .
por ejemplo:
SPRING_PROFILES_ACTIVE=dev gradle clean bootRun
Referencia: Cómo configurar perfiles Spring activos
La respuesta de Michael Yin es correcta, ¡pero parece que se requiere una mejor explicación!
Muchos de ustedes mencionaron que
-D
es la forma correcta de especificar los parámetros de JVM y tienen toda la razón.
Pero Michael también tiene razón como se menciona en la documentación de
Spring Boot Profiles
.
Lo que no está claro en la documentación es qué tipo de parámetro es:
--spring.profiles.active
es un parámetro JVM estándar, por lo tanto, si desea usarlo en su IDE, complete los campos correctos (es decir, argumentos del programa)
Mi mejor práctica es definir esto como un argumento VM "-D". Tenga en cuenta las diferencias entre spring boot 1.xy 2.x.
Los perfiles para habilitar se pueden especificar en la línea de comando:
Spring-Boot 2.x
-Dspring-boot.run.profiles=local
Spring-Boot 1.x
-Dspring.profiles.active=local
ejemplo de uso con maven:
Spring-Boot 2.x
mvn spring-boot:run -Dspring-boot.run.profiles=local
Spring-Boot 1.x
mvn spring-boot:run -Dspring.profiles.active=local
Asegúrese de separarlos con una coma para varios perfiles:
mvn spring-boot:run -Dspring.profiles.active=local,foo,bar
mvn spring-boot:run -Dspring-boot.run.profiles=local,foo,bar
Tuve que agregar esto:
bootRun {
String activeProfile = System.properties[''spring.profiles.active'']
String confLoc = System.properties[''spring.config.location'']
systemProperty "spring.profiles.active", activeProfile
systemProperty "spring.config.location", "file:$confLoc"
}
Y ahora bootRun recoge el perfil y las ubicaciones de configuración.
Muchas gracias @jst por el puntero.
puede usar la siguiente línea de comando:
java -jar -Dspring.profiles.active=[yourProfileName] target/[yourJar].jar
-Dspring.profiles.active=staging -Dspring.config.location=C:/Config
no es correcto.
debiera ser:
--spring.profiles.active=staging --spring.config.location=C:/Config