12.2 在Spring Boot的application.properties中使用env变量| Java Debug 笔记

687 阅读1分钟

本文正在参加「Java主题月 - Java Debug笔记活动」,详情查看<活动链接>

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

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

1, 我们首先在本地对其进行测试(意味着我们需要在PC上安装MySQL);

2, 然后我们推送到Bitbucket;

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

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

我们遇到的问题是: 1, 在application.properties中,我们无法对MySQL信息进行硬编码。 由于我们的项目将在3个不同的地方(本地,Jenkins和OpenShift)运行,因此我们需要在application.properties中使数据源字段动态化(我们知道可以采用不同的方法,但是目前我们正在研究此解决方案 )。

我们想到的解决方案是在本地和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变量,而这正是我们遇到的麻烦。

回答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}