首页 > 解决方案 > 我可以根据我所在的分支(在 Dockerfile 中指定)更改数据库吗?

问题描述

我想拥有我的:

spring.datasource.url = jdbc:mysql://666.666.666.666/prod_very_wow

变成:

spring.datasource.url = jdbc:mysql://666.666.666.666/dev_very_wow

根据我目前所在的分支。我想我也应该在 Dockerfile 中指定它——我应该在 docker 的 RUN 旁边添加一个属性,该属性应该确定应该激活哪个数据源。

也就是说,当我在 master 分支上时,我希望我的应用程序连接到 prod_very_wow,并且每次我检查 dev 或创建新功能分支时都连接到 dev_very_wow,并让它全部由添加到 RUN mvn 包中的属性决定。

如果这个问题没有意义,我深表歉意,但是,坦率地说 - 我有点不知道如何问这个问题,所以我很难用谷歌搜索答案。我刚刚找到了一些关于“环境变量”的线索,但我找不到连接到的数据源和我当前所在的分支之间的任何连接。

标签: javamysqlspringdockerbranch

解决方案


根据环境处理不同配置的最佳方法是将代码与配置分离,这是应用程序十二要素原则之一。在这种情况下,您应该有一个外部配置服务器,例如 spring cloud 配置服务器,它将托管不同环境的配置文件,应用程序将根据部署的环境向该配置服务器询问正确的配置文件。

但是,如果您不想遵循这种方法,您可以在应用程序中创建不同的配置文件,并使用一个环境变量来告诉 spring 使用哪个文件。例如,在您的情况下,您可以有一个 application-local.yaml 和 application-prod.yaml,然后如果您想在 mvn package 命令的 dockerfile 中指定它,您可以使用:

RUN mvn -Dspring.profiles.activ=local package
RUN mvn -Dspring.profiles.activ=prod package

推荐阅读