Docker环境变量中的Spring属性

时间:2016-04-17 07:05:25

标签: java spring docker

我正在尝试使用我的Spring 3.2.16应用程序的环境变量在docker容器内的配置文件之间切换。

在我的应用程序上下文中,我有两个加载属性文件的配置文件,我反对的(100%工作)看起来像这样:

<beans profile="dev">
    <context:property-placeholder location="classpath*:META-INF/spring/dev.properties" />
</beans>

将应用程序打包到容器中时,没有太多内容,这是我的Docker文件:

FROM jetty
MAINTAINER Jan Vladimir Mostert "me@example.com"

ADD ./target/ROOT.war /var/lib/jetty/webapps/ROOT.war

EXPOSE 8080

运行时,请注意-e标志以设置环境变量:

docker run --name='_______' -d -p 8000:8080 --link rabbitmq:rabbitmq -e ENV=test _________________

testprod...中运行时,默认配置文件会在我设置为cloud时启动。这也有效:

<beans profile="cloud">
    <context:property-placeholder location="classpath*:META-INF/spring/test.properties" />
</beans>

现在我想换掉test.properties来从环境变量中获取配置文件。

我已尝试使用systemProperties,但它不起作用:

    <beans profile="cloud">
        <context:property-placeholder 
            location="classpath*:META-INF/spring/#{systemProperties['ENV']}.properties" />
    </beans>

我尝试使用systemEnvironment,但这两种方式都不起作用:

<beans profile="cloud">
    <context:property-placeholder 
        location="classpath*:META-INF/spring/#{systemEnvironment['ENV']}.properties" />
</beans>

输入容器:

docker exec -ti _______ bash

并正在运行

echo $ENV

打印

  

测试

环境变量设置正确,将该变量放入applicationContext.xml的正确方法是什么?

1 个答案:

答案 0 :(得分:1)

切换到

       c   s   0
 M' =  -s  c   0
       dx  dy  1  

神奇地使它发挥作用。