example baeldung application spring spring-profiles

baeldung - ¿Cuál es el orden de prioridad cuando hay varios perfiles de entorno de Spring según lo establecido por spring.profiles.active?



spring default profile (2)

El orden de los perfiles en la propiedad del sistema spring.profiles.active no importa. La "precedencia" se define por el orden de declaración de los beans, incluidos los beans específicos de un perfil, y la última definición de bean gana .

Usando su ejemplo, si se -Dspring.profiles.active="default,dev" , el bean props en el perfil default se usaría aquí, simplemente porque es la última definición activa de ese bean:

<beans profile="dev"> <bean id="props" class="org.springframework.context.support.PropertySourcesPlaceholderConfigurer"> <property name="location" value="classpath:META-INF/dev.properties"/> </bean> </beans> <beans profile="default"> <bean id="props" class="org.springframework.context.support.PropertySourcesPlaceholderConfigurer"> <property name="location" value="classpath:META-INF/default.properties"/> </bean> </beans>

Invertir el orden de los beans, y luego se usaría la versión dev , independientemente de cómo se ordenan los perfiles en spring.profiles.active .

Tenga en cuenta que no usé <context:property-placeholder/> porque no le permite especificar explícitamente un ID de bean, por lo que no estoy seguro de qué comportamiento mostraría si se usa más de uno. Imagino que las propiedades se fusionarían, de modo que las propiedades definidas por ambos usarían la última definición, pero las propiedades específicas de cada archivo permanecerían intactas.

De lo contrario, en mi experiencia, normalmente definirías beans en este orden:

  1. Definiciones de bean "predeterminadas", no específicas de un perfil
  2. Anulación de definiciones de bean en un perfil específico del entorno
  3. Anulación de definiciones de bean en un perfil específico de prueba

De esta manera, los beans de perfil de prueba ganarían si se usaran en combinación con otros perfiles; de lo contrario, utilizaría beans específicos del entorno o beans predeterminados según el perfil.

Me pregunto cuál es el orden de prioridad cuando se han especificado varios perfiles activos de Spring .

Digamos que quiero que el perfil default esté activo, pero el perfil dev para anularlo cuando hay varios elementos idénticos (por ejemplo, beans) para elegir pero con diferentes perfiles ...

Por ejemplo, tengo dos beans PropertySourcesPlaceholderConfigurer configurados con valores "default" y "dev" en los perfiles de un entorno.

Si uso la siguiente activación de perfil: -Dspring.profiles.active="default,dev"

¿ dev perfil de desarrollo el default ?

Si no, ¿cómo se puede lograr el comportamiento anterior?


SuperEB tiene razón: el orden de los perfiles no importa para los beans, el orden de declaración es más importante allí, pero tenga en cuenta que el orden es importante si utiliza archivos de configuración basados ​​en perfiles.