如何根据 属性 文件或环境变量参数化 spring constructor-arg 注入?

how can I parametrize the spring constructor-arg injection based on the property file or environmental variable?

我的 spring 应用程序中有以下构造函数:

<bean id="metadata" class="org.springframework.security.saml.metadata.CachingMetadataManager">
    <constructor-arg>
        <list>
            <bean class="org.springframework.security.saml.metadata.ExtendedMetadataDelegate">
                <constructor-arg>
                    <bean class="org.opensaml.saml2.metadata.provider.FilesystemMetadataProvider">
                        <constructor-arg>
                            <value type="java.io.File">classpath:metadata/idp-test.xml</value>
                        </constructor-arg>
                        <property name="parserPool" ref="parserPool"/>
                    </bean>
                </constructor-arg>
                <constructor-arg>
                    <bean class="org.springframework.security.saml.metadata.ExtendedMetadata"/>
                </constructor-arg>
            </bean>
        </list>
    </constructor-arg>
</bean>

现在,我有 2 个不同的 xml 配置文件,一个用于测试环境,一个用于生产环境。上面的配置中有没有一种方法可以有某种 switch (或者 if-else 可能?),基于它会有 idp-test.xml 或不同的 [=17= 】 注入?我假设它将基于 属性 文件或例如环境变量,它将存储它是哪个环境的信息(测试或生产)。

您是否正在寻找仅在激活特定配置文件时才允许启用 bean 的配置文件功能?

如果是,您可以先为 bean 配置配置文件:

<beans profile="prod">
  <bean id="metadata" class="org.springframework.security.saml.metadata.CachingMetadataManager">
  </bean>
</bean>

<beans profile="test">
  <bean id="metadata" class="org.springframework.security.saml.metadata.CachingMetadataManager">
  </bean>
</bean>

activating a particular profile通过在启动JVM的命令中配置JVM系统属性spring.profiles.active:

 -Dspring.profiles.active="prod"

或从环境变量激活:

export spring_profiles_active=prod

在这种情况下,只有具有 prod 配置文件且未指定任何配置文件的 bean 将被启用。