Tomcat的Spring应用程序属性与docker容器链接

我一直在玩docker。

我有我的MySQL容器

docker run –name mymysql -d mysql / mysql-server:5.6

我的应用程序部署在我的Tomcat容器

docker运行 – 链接mymysql:mysql -d我的tomcat

在tomcat容器中,我可以看到(因为链接)

.. MYTOMCAT_PORT_8080_TCP_ADDR=172.17.0.55 .. and in the /etc/hosts 172.17.0.55 mysql 

在我的Spring应用程序中,我用这种方式pipe理属性

  class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="locations"> <list> <value>classpath:${env}/myapp.properties</value> </list> </property> </bean> 

其中取决于configuration(propvariables在tomcat的JAVA_OPTS中设置-Denv = qa)

在qa / myapp.properties我有例如mysql链接

 databaseUrl=jdbc:mysql://mysql:3306/mydb 

“mysql”是mysql docker镜像的名称,和tomcat容器的/ etc / hosts中的一样

我想知道如果我处理的东西的方式被认为是良好的做法? 有一个更容易/更聪明的方式来处理属性? 事实上,我的Java应用程序与我的docker的图像的名称强烈联系在一起。

我想有一种运行在tomcat容器上的脚本,它使用/ etc / hosts值的ENVvariables(MYTOMCAT_PORT_8080_TCP_ADDR)即时生成最终的may.properties。 这是一个更好的解决scheme吗?

我只是自己解决这个问题。 为了不紧密耦合你的mysql数据库容器到你可以使用另一个JAVA_OPTS或CATALINA_OPTS传递你的mysql url然后在你的databaseUrl中使用。 所以对于你的例子,你可以这样做:

 docker run --link mysql_container:mysql -e JAVA_OPTS="-Denv=qa -Dmysql_url=//mysql:3306" 

然后在你的连接configuration中:

 databaseUrl=jdbc:mysql:${mysql_url}/mydb 

让我知道是否有任何意义。 我发现的很多例子只是稍微不给我全面的答案,所以我可以理解你是否需要更多的信息。