在 Spring Boot 的应用程序中使用 env 变量。属性
我们正在开发一个Spring Boot Web应用程序,我们使用的数据库是MySQL;
-
我们的设置是首先在本地测试它(意味着我们需要在PC上安装MySQL);
-
然后我们推到Bitbucket;
-
Jenkins 会自动检测对 Bitbucket 的新推送,并在其上进行构建(对于 Jenkins mvn 构建的传递,我们还需要在运行 Jenkins 的虚拟机上安装 MySQL)。
-
如果 Jenkins 构建传递,我们会将代码推送到 OpenShift 上的应用程序(使用 Jenkins 上的 Openshift 部署插件)。
正如您可能已经弄清楚的那样,我们遇到的问题是:
-
在我们不能硬编码MySQL信息。由于我们的项目将在3个不同的地方(本地,Jenkins和OpenShift)运行,我们需要使数据源字段动态化(我们知道有不同的方法来做到这一点,但我们现在正在研究这个解决方案)。
application.properties
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"
我们已经这样做了,它有效。我们还检查了环境变量可以按如下方式转换为java变量:Map<String, String> env = System.getenv();
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");
现在剩下的唯一事情是我们需要在我们的中使用这些java变量,这就是我们遇到的问题。application.properties
在哪个文件夹中,以及如何分配,我们需要分配,,和变量才能看到它们,以及如何将它们包含在中?password
userName
sqlURL
sqlPort
application.properties
application.properties
我们尝试了很多事情,其中之一就是:
spring.datasource.url = ${sqlURL}:${sqlPort}/"nameofDB"
spring.datasource.username = ${userName}
spring.datasource.password = ${password}
到目前为止没有运气。我们可能没有将这些环境变量放在正确的类/文件夹中,或者在 中错误地使用它们。application.properties