spring 如何按环境加载配置文件?

Posted

技术标签:

【中文标题】spring 如何按环境加载配置文件?【英文标题】:How spring load configuration file by environment? 【发布时间】:2016-01-16 04:12:57 【问题描述】:

我在我的应用程序中使用spring框架,并且我使用了一些配置文件,但是在不同的环境中,我需要使用不同的属性,例如db config properties。现在我将不同的文件放在不同的路径中,然后我使用maven profile方法来打包不同的WAR。

现在,我想在所有环境中只打包一个WAR,并希望通过传递不同的参数来使用不同的配置文件。另外我不想把配置文件放在项目之外。

【问题讨论】:

你想要的结果到底是什么?正在构建一个包含每个受支持环境的配置文件的 WAR?为每个环境构建一个单独的 WAR,每个环境只包含适当的配置?基于构建参数,使用单一环境配置构建单个 WAR? 【参考方案1】:

您可以使用 spring bean 配置文件或条件 beans。您可以使用以下配置为每个环境定义 propertyplaceholder beans。

        <beans profile="environment1">
<bean 
    class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">

    <property name="location">
        <value>database_env1.properties</value>
    </property>
</bean>
</beans>

<beans profile="environment2">
<bean 
    class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">

    <property name="location">
        <value>database_env2.properties</value>
    </property>
</bean>
</beans>

【讨论】:

能说详细点吗?【参考方案2】:

对于数据库配置,一种可能的方法是直接在您的应用服务器中将 JDBC 数据源定义为 JNDI 资源,然后使用 (see how) - 这样您的 WAR 文件不包含连接信息、运行时环境确实保存此信息。

这种方法的一个优点是连接信息可以由服务器管理员而不是应用程序开发人员来管理。

但不确定它是否满足您的“项目外无配置”要求。

【讨论】:

我还有redis config等等。

以上是关于spring 如何按环境加载配置文件?的主要内容,如果未能解决你的问题,请参考以下文章

微服务中如何获取配置文件以及多环境切换配置

如何为开发和生产环境建立不同的配置文件

spring加载多个配置文件如何配置

SpringCloud 多环境配置文件使用

spring-自动加载配置文件使用属性文件注入

Junit运行在Spring环境下