variable restaurar modificar java_home entorno configurar java spring spring-profiles

restaurar - variables de entorno java linux



¿Cómo configurar el perfil Spring desde la variable del sistema? (6)

Tengo un proyecto de primavera que utiliza otro proyecto. Cada proyecto tiene su propio perfil de resorte para inicializar desde código java usando applicationContext.xml y *.properties para cada perfil. Yo inyecto el perfil de args[] . El problema es que el segundo proyecto usa la configuración predeterminada para el env del applicationContext.xml No puedo inyectar el env desde args[] al segundo proyecto y traté de buscar un artículo que explique cómo funciona el perfil de Spring.

  1. ¿Hay una jerarquía en la que se verá el perfil cuando el valor predeterminado no esté configurado en applicationContext.xml ?
  2. ¿Es System var más fuerte que la configuración de applicationContext.xml ?
  3. ¿Cuál crees que es la mejor solución a mi reto?

¡Los artículos sobre ese tema o incluso ejemplos serían los más apreciados! Gracias por adelantado.


Mi solución es establecer la variable de entorno como spring.profiles.active=development . De modo que todas las aplicaciones que se ejecutan en esa máquina referirán la variable e iniciarán la aplicación. El orden en que el resorte carga las propiedades de la siguiente manera

application.properties system properties environment variable


Normalmente configuro el applicationContext utilizando la configuración basada en anotación en lugar de la configuración basada en XML . De todos modos, creo que ambos tienen la misma prioridad .

* Respondiendo a su pregunta, la variable del sistema tiene mayor prioridad *

Obteniendo beans basados ​​en perfil de applicationContext

  • Usar @Profile en un Bean

    @Component @Profile("dev") public class DatasourceConfigForDev

    Ahora, el perfil es dev

    Nota: si el perfil se proporciona como @Profile("!dev") , el perfil excluirá dev y será para todos los demás.

  • Usar atributos de perfiles en XML

    <beans profile="dev"> <bean id="DatasourceConfigForDev" class="org.skoolguy.profiles.DatasourceConfigForDev"/> </beans>

Establecer el valor para el perfil:

  • Programáticamente a través de la interfaz WebApplicationInitializer

    En las aplicaciones web, se puede usar WebApplicationInitializer para configurar el ServletContext mediante programación.

    @Configuration public class MyWebApplicationInitializer implements WebApplicationInitializer { @Override public void onStartup(ServletContext servletContext) throws ServletException { servletContext.setInitParameter("spring.profiles.active", "dev"); } }

  • Programáticamente a través de ConfigurableEnvironment

    También puede establecer perfiles directamente en el entorno:

    @Autowired private ConfigurableEnvironment env; ... env.setActiveProfiles("dev");

  • Parámetro de contexto en web.xml

    Los perfiles también se pueden activar en el web.xml de la aplicación web, usando un parámetro de contexto:

    <context-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/app-config.xml</param-value> </context-param> <context-param> <param-name>spring.profiles.active</param-name> <param-value>dev</param-value> </context-param>

  • Parámetro del sistema JVM

    Los nombres de perfil pasados ​​como parámetro se activarán durante el inicio de la aplicación:

    -Dspring.profiles.active=dev

    En los IDE, puede establecer las variables de entorno y los valores que se utilizarán cuando se ejecute una aplicación. La siguiente es la configuración de ejecución en Eclipse:

  • Variable ambiental

    para establecer a través de la línea de comandos: export spring_profiles_active=dev

Cualquier bean que no especifique un perfil pertenece al perfil "predeterminado".

El orden de prioridad es:

  1. Parámetro de contexto en web.xml
  2. WebApplicationInitializer
  3. Parámetro del sistema JVM
  4. Variable ambiental

SPRING_PROFILES_ACTIVE es la variable de entorno para anular / elegir el perfil Spring


Si ejecuto la línea de comandos: java -Dspring.profiles.active=development -jar yourApplication.jar desde mi directorio de java -Dspring.profiles.active=development -jar yourApplication.jar , indica que la ruta es incorrecta. Así que acabo de definir el perfil en manualy en el archivo application.properties como este:

spring.profiles.active=mysql

o

spring.profiles.active=postgres

o

spring.profiles.active=mongodb


Si está utilizando la ventana acoplable para implementar la aplicación Spring Boot, puede configurar el perfil utilizando el indicador e :

docker run -e "SPRING_PROFILES_ACTIVE = prod" -p 8080: 8080 -t r.test.co/myapp:latest


Si proporciona a su JVM el perfil de Spring, no debería haber problemas:

java -Dspring.profiles.active=development -jar yourApplication.jar

Ver también la documentación de primavera:

http://docs.spring.io/spring-boot/docs/current/reference/html/howto-properties-and-configuration.html

69.5 Establecer los perfiles activos de primavera

Spring Environment tiene una API para esto, pero normalmente establecería una propiedad del sistema (spring.profiles.active) o una variable de entorno del sistema operativo (SPRING_PROFILES_ACTIVE). Por ejemplo, inicie su aplicación con un argumento -D (recuerde colocarlo antes de la clase principal o el archivo jar):

$ java -jar -Dspring.profiles.active = production demo-0.0.1-SNAPSHOT.jar

En Spring Boot también puede establecer el perfil activo en application.properties, por ejemplo,

Spring.profiles.active = producción

Un valor establecido de esta manera se reemplaza por la propiedad del sistema o la configuración de la variable de entorno, pero no por el método SpringApplicationBuilder.profiles (). Por lo tanto, la última API de Java se puede utilizar para aumentar los perfiles sin cambiar los valores predeterminados.

Consulte el Capítulo 25, Perfiles en la sección "Características de Spring Boot" para obtener más información.