我们正在开发一个Spring Boot web应用程序,我们使用的数据库是MySQL;
我们的设置是我们首先测试它在本地(意味着我们需要在我们的PC上安装MySQL);
则推送到Bitbucket;
如果Jenkins构建通过,我们将代码推到OpenShift上的应用程序(在Jenkins上使用OpenShift部署插件)。
你可能已经发现了,我们的问题是:
在application.properties
我们不能硬编码MySQL信息。由于我们的项目将在3个不同的地方运行(当地的, 詹金斯和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变量,这就是我们遇到的麻烦。
在哪个文件夹中,我们需要为application.properties
分配password
, userName
, sqlURL
和sqlPort
变量,以便能够看到它们,以及如何将它们包含在application.properties
中?
我们尝试了很多东西,其中之一是:
spring.datasource.url = ${sqlURL}:${sqlPort}/"nameofDB"
spring.datasource.username = ${userName}
spring.datasource.password = ${password}
到目前为止还没有。我们可能没有将这些环境变量放在正确的类/文件夹中,或者在application.properties
中错误地使用了它们。