我们正在开发一个 Spring Boot Web 应用程序,我们使用的数据库是 MySQL;
我们的设置是我们首先在 本地 测试它(意味着我们需要在我们的 PC 上安装 MySQL);
然后我们推送到 Bitbucket;
Jenkins 会自动检测到 Bitbucket 的新推送并在其上进行构建(为了让 Jenkins mvn build 通过,我们还需要在运行 Jenkins 的虚拟机上安装 MySQL)。
如果 Jenkins 构建通过,我们将代码推送到 OpenShift 上的应用程序(使用 Jenkins 上的 Openshift 部署插件)。
正如您可能已经发现的那样,我们遇到的问题是:
- 在
application.properties
我们不能硬编码 MySQL 信息。由于我们的项目将在 3 个不同的地方( local 、 Jenkins 和 OpenShift )运行,我们需要在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 许可协议
您不需要使用 java 变量。要包含系统环境变量,请将以下内容添加到您的
application.properties
文件中:但是 @Stefan Isele 建议的方法更可取,因为在这种情况下,您只需声明一个环境变量:
spring.profiles.active
。 Spring 将通过application-{profile-name}.properties
模板自动读取适当的属性文件。