通过在Spring中更改环境名称来动态切换属性文件

时间:2014-01-10 07:22:38

标签: java spring java-ee spring-mvc environment-variables

我想知道是否有任何方法可以动态设置环境变量的值而无需重新启动服务器,以便可以根据当前设置环境的值访问不同的属性文件。

考虑这些是我的两个属性文件:

config-dev.properties
config-prod.properties

现在我已经在每个文件中添加了环境名称,所以我想知道我可以动态更改或设置环境名称的值,并且无需重新启动服务器即可使用相应的属性文件。 / p>

我知道如何在配置XML文件中设置 env.name

<context:property-placeholder location="classpath:/config-${env.name}.properties>

我想以编程方式更改环境名称,以便在访问时可以使用正确的属性文件。

1 个答案:

答案 0 :(得分:0)

<context:property-placeholder location="classpath:/config-${env.name}.properties>是一种方法。您的env.name是运行配置的位置可以是您设置的启动参数。

另一种方法是使用Spring bean Profile。在哪里定义一个配置文件,并在Spring容器启动期间加载为这些配置文件定义的bean。

<beans profile="dev">
    <bean .... />
<context:property-placeholder
    location="classpath:conf/properties/dev.properties" />
</beans>

<beans profile="prod">
    <bean .... />
<context:property-placeholder
    location="classpath:conf/properties/prod.properties" />
</beans>

我不确定在不重新启动服务器的情况下更改它。因为你的Spring容器已经启动了,所以bean已经加载了。现在你想要加载一组不同的bean而不重新启动Spring容器。我不确定。

根据我的基本原因是,如何在运行时更改已经自动装配的依赖项而不影响任何其他正在运行的应用程序类?正在执行的功能如何以及您希望通过属性文件中的开关更改数据库URL?你如何控制它?