在 Spring Boot 的 application.properties 中使用 env 变量

新手上路,请多包涵

我们正在开发一个 Spring Boot Web 应用程序,我们使用的数据库是 MySQL;

  • 我们的设置是我们首先在 本地 测试它(意味着我们需要在我们的 PC 上安装 MySQL);

  • 然后我们推送到 Bitbucket;

  • Jenkins 会自动检测到 Bitbucket 的新推送并在其上进行构建(为了让 Jenkins mvn build 通过,我们还需要在运行 Jenkins 的虚拟机上安装 MySQL)。

  • 如果 Jenkins 构建通过,我们将代码推送到 OpenShift 上的应用程序(使用 Jenkins 上的 Openshift 部署插件)。

正如您可能已经发现的那样,我们遇到的问题是:

  • application.properties 我们不能硬编码 MySQL 信息。由于我们的项目将在 3 个不同的地方( localJenkinsOpenShift )运行,我们需要在 application.properties 数据源字段动态化(我们知道有不同的方法,但我们正在努力这个解决方案现在)。
     spring.datasource.url =
    spring.datasource.username =
    spring.datasource.password =

我们提出的解决方案是我们在本地和 Jenkins VM 中创建系统环境变量(以与 OpenShift 命名它们相同的方式命名它们),并分别为它们分配正确的值:

 export OPENSHIFT_MYSQL_DB_HOST="jdbc:mysql://localhost"
export OPENSHIFT_MYSQL_DB_PORT="3306"
export OPENSHIFT_MYSQL_DB_USERNAME="root"
export OPENSHIFT_MYSQL_DB_PASSWORD="123asd"

我们已经做到了这一点,它的工作原理。我们还检查了 Map<String, String> env = System.getenv(); 环境变量可以这样变成 java 变量:

 String password = env.get("OPENSHIFT_MYSQL_DB_PASSWORD");
String userName = env.get("OPENSHIFT_MYSQL_DB_USERNAME");
String sqlURL = env.get("OPENSHIFT_MYSQL_DB_HOST");
String sqlPort = env.get("OPENSHIFT_MYSQL_DB_PORT");

现在唯一剩下的就是我们需要在我们的 application.properties 中使用这些 java 变量,这就是我们遇到的问题。

In which folder, and how, do we need to assign the password , userName , sqlURL , and sqlPort variables for application.properties 能够看到它们以及我们如何将它们包含在 application.properties 中?

我们尝试了很多事情,其中之一是:

 spring.datasource.url = ${sqlURL}:${sqlPort}/"nameofDB"
spring.datasource.username = ${userName}
spring.datasource.password = ${password}

到目前为止没有运气。我们可能没有将这些环境变量放在正确的类/文件夹中,或者在 application.properties 中错误地使用它们。

原文由 S M 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 938
1 个回答

您不需要使用 java 变量。要包含系统环境变量,请将以下内容添加到您的 application.properties 文件中:

 spring.datasource.url = ${OPENSHIFT_MYSQL_DB_HOST}:${OPENSHIFT_MYSQL_DB_PORT}/"nameofDB"
spring.datasource.username = ${OPENSHIFT_MYSQL_DB_USERNAME}
spring.datasource.password = ${OPENSHIFT_MYSQL_DB_PASSWORD}

但是 @Stefan Isele 建议的方法更可取,因为在这种情况下,您只需声明一个环境变量: spring.profiles.active 。 Spring 将通过 application-{profile-name}.properties 模板自动读取适当的属性文件。

原文由 Ken Bekov 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题