泊坞窗。 Spring应用程序。集&获取环境变量

时间:2016-09-08 13:28:33

标签: java spring docker dockerfile

我试图将我的Spring应用程序停靠。

问题: 我无法从我的Spring应用程序中获取docker容器中的环境变量。

Spring配置(2个选项,单独尝试)

<bean class="java.net.URI" id="dbUrl">
    <constructor-arg value="#{systemProperties['JDBC_CONNECTION_STRING']}"/>
</bean>

<bean class="java.net.URI" id="dbUrl">
    <constructor-arg value="#{systemEnvironment['JDBC_CONNECTION_STRING']}"/>
</bean>

也尝试过java

URI dbUrl = URI.create(System.getProperty("JDBC_CONNECTION_STRING"));

我的码头配置。每次更新值时使用docker-compose builddocker-compose up

搬运工-compose.yml

app:
  build: .
  command: catalina.sh run
  ports:
    - "8888:8080"
  links:
    - postgres
  volumes:
    - /usr/bin

postgres:
  image: postgres:9.5
  ports:
    - "5432"
  volumes:
  - /var/lib/postgresql/data

Dockerfile

FROM tomcat:jre8

ENV JDBC_CONNECTION_STRING 'postgres://postgres:password111@postgres:5432/mydb'

RUN ["rm", "-fr", "/usr/local/tomcat/webapps/ROOT"]
RUN apt-get update && apt-get install -y net-tools postgresql-client

COPY ./target/myapp.war /usr/local/tomcat/webapps/ROOT.war

CMD ["catalina.sh", "run"]

一旦我连接到容器的bash,set命令就不会显示我的变量。 但echo $JDBC_CONNECTION_STRING显示了该值。

2 个答案:

答案 0 :(得分:2)

在java代码中,您使用的是java系统属性,而不是系统环境变量。为了将系统属性传递给java进程,您需要在运行命令中指定-Dkey = value。

所以如果这是tomcat你可以设置$ JAVA_OPTS =&#34; ... -DJDBC_CONNECTION_STRING = $ JDBC_CONNECTION_STRING&#34;

答案 1 :(得分:0)

我认为你在两种方法之间混淆:System.getProperties(String)和System.getenv(String)。前一个用于获取特定于java的系统环境变量(-D属性),而后一个方法将获取System环境变量。因此,为了使用System环境变量(在docker中配置),您应该使用方法:

URI dbUrl = URI.create(System.getenv("JDBC_CONNECTION_STRING"));