Каков порядок приоритета, когда есть несколько профилей среды 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/> потому что это не позволяет явно указать идентификатор компонента, и поэтому я не уверен, какое поведение он будет демонстрировать, если используется более одного. Я предполагаю, что свойства будут объединены, так что свойства, определенные обоими, будут использовать последнее определение, но свойства, характерные для каждого файла, останутся нетронутыми.

в противном случае, по моему опыту, обычно вы определяете бобы в следующем порядке:

  1. определения"по умолчанию", не относящиеся к профилю
  2. переопределение определений bean в профиле, специфичном для среды
  3. переопределение определений bean в тестовом профиле

таким образом, тестовые бобы профиля выиграют, если они будут использоваться в сочетании с другими профилями; иначе вы будете использовать бобы для конкретной среды или бобы по умолчанию на основе профиля.


superEB прав порядок профилей не имеет значения для бобов, порядок объявления там более важен, но имейте в виду, что порядок важен, если вы используете файлы конфигурации на основе профиля!