我可以根据我所在的分支(在 Dockerfile 中指定)更改数据库吗?

Can I change a database depending on the branch I am on (specified in 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 的 运行 旁边添加一个 属性,它应该确定应该激活哪个数据源。

也就是说,我希望我的应用程序在主分支上时连接到 prod_very_wow 并且每次我检查开发或创建新功能分支时都连接到 dev_very_wow 并拥有它由添加到 Dockerfile 中的 运行 mvn 包的 属性 确定。

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

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

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

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