Каков порядок приоритета, когда есть несколько профилей среды Spring, установленных spring.профили.активный
мне просто интересно, что порядок приоритета-это когда указано несколько активных профилей Spring.
скажи, что я хочу default
профиль должен быть активным, но dev
профиль, чтобы переопределить его, когда есть несколько одинаковых элементов (например, бобы) на выбор, но с разными профилями...
скажем, например, у меня есть два PropertySourcesPlaceholderConfigurer
бобы настроен с "default"
и "dev"
значения среды профили.
если я использую следующий инструмент: -Dspring.profiles.active="default,dev"
будет dev
профиль переопределить default
один?
если нет, то как можно достичь вышеуказанного поведения?
2 ответов
порядок профилей в spring.profiles.active
системное свойство не имеет значения. "Приоритет" определяется порядком объявления бобов, включая бобы, специфичные для профиля, и последнее определение bean выигрывает.
используя Ваш пример, если -Dspring.profiles.active="default,dev"
используется props
фасоль в default
профиль будет использоваться здесь, просто потому, что это последнее активное определение этого компонента:
<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>
инвертировать порядок бобов, а затем dev
версия будет использоваться, независимо от того, как профили заказываются в spring.profiles.active
.
обратите внимание, что я не использовал <context:property-placeholder/>
потому что это не позволяет явно указать идентификатор компонента, и поэтому я не уверен, какое поведение он будет демонстрировать, если используется более одного. Я предполагаю, что свойства будут объединены, так что свойства, определенные обоими, будут использовать последнее определение, но свойства, характерные для каждого файла, останутся нетронутыми.
в противном случае, по моему опыту, обычно вы определяете бобы в следующем порядке:
- определения"по умолчанию", не относящиеся к профилю
- переопределение определений bean в профиле, специфичном для среды
- переопределение определений bean в тестовом профиле
таким образом, тестовые бобы профиля выиграют, если они будут использоваться в сочетании с другими профилями; иначе вы будете использовать бобы для конкретной среды или бобы по умолчанию на основе профиля.
superEB прав порядок профилей не имеет значения для бобов, порядок объявления там более важен, но имейте в виду, что порядок важен, если вы используете файлы конфигурации на основе профиля!