我一直在玩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。这是一个更好的解决方案吗?
答案 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
如果其中任何一项都没有意义,请告诉我。我找到的很多例子都没有给我完整的答案,所以我可以理解你是否需要更多的信息。