我试图将我的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 build
和docker-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
显示了该值。
答案 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"));