当 spring.profiles.active 设置多个 Spring 环境配置文件时,优先顺序是什么

2023-12-24

我只是想知道是什么优先顺序是指定多个 Spring 活动配置文件时的顺序.

说我想要default配置文件处于活动状态,但dev当有多个相同的元素(例如 bean)可供选择但具有不同的配置文件时,配置文件将覆盖它...

比如说我有两个PropertySourcesPlaceholderConfigurer豆配置"default" and "dev"重视环境概况。

如果我使用以下配置文件激活:-Dspring.profiles.active="default,dev"

会不会dev配置文件覆盖default one?

如果不是,如何实现上述行为?


配置文件中的顺序spring.profiles.active系统属性并不重要。 “优先级”由 bean 的声明顺序定义,包括特定于配置文件的 bean,以及最后一个 bean 定义获胜.

使用你的例子,如果-Dspring.profiles.active="default,dev"被使用时,props豆子在default此处将使用 profile,只是因为它是该 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>

颠倒豆子的顺序,然后dev版本将被使用,无论配置文件如何排序spring.profiles.active.

请注意,我没有使用<context:property-placeholder/>因为它不允许您显式指定 bean id,所以我不确定如果使用多个 bean id,它会表现出什么行为。我想象这些属性将被合并,以便两者定义的属性将使用最后一个定义,但特定于每个文件的属性将保持不变。

否则,根据我的经验,您通常会按以下顺序定义 bean:

  1. “默认”bean 定义,不特定于配置文件
  2. 覆盖特定于环境的配置文件中的 bean 定义
  3. 覆盖特定于测试的配置文件中的 bean 定义

这样,如果与其他配置文件结合使用,测试配置文件 bean 将获胜;否则,您可以根据配置文件使用特定于环境的 bean 或默认 bean。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

当 spring.profiles.active 设置多个 Spring 环境配置文件时,优先顺序是什么 的相关文章

随机推荐