本文正在参加「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}