其他分享
首页 > 其他分享> > 当spring.profiles.active设置了多个Spring的环境配置文件时,优先顺序是什么

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

作者:互联网

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

假设我希望默认配置文件处于活动状态,但是当有几个相同的元素(例如bean)可供选择但具有不同的配置文件时,dev配置文件将覆盖它…

比方说,我有两个PropertySourcesPlaceholderConfigurer bean配置了“default”和“dev”值环境配置文件.

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

dev配置文件是否会覆盖默认配置文件?

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

解决方法:

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

使用您的示例,如果使用-Dspring.profiles.active =“default,dev”,则此处将使用默认配置文件中的props bean,因为它是该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>

反转bean的顺序,然后将使用dev版本,无论在spring.profiles.active中如何排序配置文件.

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

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

>“默认”bean定义,不是特定于配置文件
>在特定于环境的配置文件中覆盖bean定义
>在特定于测试的配置文件中覆盖bean定义

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

标签:spring,spring-profiles
来源: https://codeday.me/bug/20190930/1835777.html