Je me demande simplement ce que l'ordre de priorité est lorsque plusieurs profils actifs Spring ont été spécifiés.
Disons que je veux que le profil default
soit actif mais que le profil dev
le remplace lorsqu'il y a plusieurs éléments identiques (beans par exemple) à choisir mais avec des profils différents ...
Disons par exemple que j'ai deux PropertySourcesPlaceholderConfigurer
beans configurés avec "default"
et "dev"
valorise un profil d'environnement.
Si j'utilise l'activation de profil suivante: -Dspring.profiles.active="default,dev"
Le profil dev
remplacera-t-il celui default
?
Sinon, comment le comportement ci-dessus peut-il être atteint?
L'ordre des profils dans le spring.profiles.active
la propriété système n'a pas d'importance. La "priorité" est définie par l'ordre de déclaration des beans, y compris les beans spécifiques à un profil, et la dernière définition de bean gagne.
En utilisant votre exemple, si -Dspring.profiles.active="default,dev"
est utilisé, le bean props
dans le profil default
serait utilisé ici, simplement parce que c'est la dernière définition active de ce 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>
Inversez l'ordre des beans, puis la version dev
serait utilisée, quelle que soit la façon dont les profils sont ordonnés dans spring.profiles.active
.
Notez que je n'ai pas utilisé <context:property-placeholder/>
car il ne vous permet pas de spécifier explicitement un identifiant de bean, et je ne suis donc pas sûr du comportement qu'il présenterait si plusieurs étaient utilisés. J'imagine que les propriétés seraient fusionnées, de sorte que les propriétés définies par les deux utiliseraient la dernière définition, mais les propriétés spécifiques à chaque fichier resteraient intactes.
Sinon, d'après mon expérience, vous définiriez généralement les beans dans cet ordre:
De cette façon, les beans de profil de test gagneraient s'ils étaient utilisés en combinaison avec d'autres profils; sinon, vous utiliserez soit des beans spécifiques à l'environnement, soit des beans par défaut basés sur le profil.
superEB a raison, l'ordre des profils n'a pas d'importance pour les beans, l'ordre de déclaration y est plus important, mais gardez à l'esprit que l'ordre est important si vous utilisez des fichiers de configuration basés sur des profils!