java - 我可以根据我所在的分支(在 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 包中的属性决定。
如果这个问题没有意义,我深表歉意,但是,坦率地说 - 我有点不知道如何问这个问题,所以我很难用谷歌搜索答案。我刚刚找到了一些关于“环境变量”的线索,但我找不到连接到的数据源和我当前所在的分支之间的任何连接。
解决方案
根据环境处理不同配置的最佳方法是将代码与配置分离,这是应用程序十二要素原则之一。在这种情况下,您应该有一个外部配置服务器,例如 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
推荐阅读
- javascript - 在多个选项卡上打开同一个应用程序时服务人员的行为?
- mysql - 从 MYSQL 迁移到 Elasticsearch 的最佳方法是什么?
- android - 如何在 Google Pixel 3 中获取 Wi-Fi 信息?
- android - 如何控制 latLngBounds.southwest 和 latLngBounds.northeast 在多边形之外?
- s4sdk - 无法在 CF 中托管简单的 HelloWorld 应用程序或通过本地主机访问
- sql - 触发器未触发(编译成功)
- angular - 什么时候用Subject, BehaviorSubject 和实例
- ruby-on-rails - 如何检查传递给 `link_to` 的 url 是否有效
- phpstorm - 仅限 PhpStorm 大写 SQL 关键字
- vba - 奇怪的 VBA 演示文稿关闭运行时错误 #91