Tomcat的Spring应用程序属性,其中docker容器链接

时间:2015-12-01 15:53:53

标签: java tomcat properties linker docker

我一直在玩Docker。

我有我的mysql容器

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

部署了我的应用的tomcat容器

docker run --link mymysql:mysql -d my tomcat

我在tomcat容器中看到

(因为链接)

..
MYTOMCAT_PORT_8080_TCP_ADDR=172.17.0.55
..

and in the /etc/hosts
172.17.0.55 mysql

在我的spring应用程序中,我以这种方式管理属性

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

取决于配置(在tomcat的JAVA_OPTS中设置prop变量-Denv = qa)

在qa / myapp.properties中的

我有例如mysql链接

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

其中&#39; mysql&#39;是mysql docker镜像的名称,与tomcat容器的/ etc / hosts中的名称相同

我想知道我处理事物的方式是否被视为良好做法? 是否有更简单/更聪明的处理属性的方法?我的java应用程序与我的docker的图像名称紧密相关,这一事实让我感到烦恼。

我想有一种在tomcat容器上运行的脚本,它使用ENV变量(MYTOMCAT_PORT_8080_TCP_ADDR)使用/ etc / hosts值即时构建最终的may.properties。这是一个更好的解决方案吗?

1 个答案:

答案 0 :(得分:1)

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

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

然后在您的连接配置中:

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

如果其中任何一项都没有意义,请告诉我。我找到的很多例子都没有给我完整的答案,所以我可以理解你是否需要更多的信息。