Ответ 1
Порядок профилей в системном свойстве spring.profiles.active
не имеет значения. "Приоритет" определяется порядком декларации beans, включая beans, специфичным для профиля, и определение bean выигрывает.
Используя ваш пример, если используется -Dspring.profiles.active="default,dev"
, здесь будет использоваться props
bean в профиле default
, просто потому, что это последнее активное определение этого 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>
Инвертируйте порядок beans, а затем используйте версию dev
, независимо от того, как профили упорядочены в spring.profiles.active
.
Обратите внимание, что я не использовал <context:property-placeholder/>
, потому что он не позволяет явно указывать id bean, и поэтому я не уверен, какое поведение он проявит, если используется более одного. Я предполагаю, что свойства будут объединены, так что свойства, определенные обоими, будут использовать последнее определение, но свойства, специфичные для каждого файла, останутся неповрежденными.
В противном случае, по моему опыту, вы обычно определяете beans в следующем порядке:
- "По умолчанию" bean определения, не относящиеся к профилю
- Переопределение определений bean в профиле, специфичном для среды
- Переопределение определений bean в тестовом профиле
Таким образом, тестовый профиль beans будет выигрывать, если он используется в сочетании с другими профилями; иначе вы будете использовать среду beans или по умолчанию beans на основе профиля.