在Spring Boot的application.properties中使用env变量-问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文

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

保持可爱mmm 2020-05-10 22:22:56 105

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

我们拥有的设置是我们首先在本地对其进行测试(意味着我们需要在PC上安装MySql);

然后我们推向Bitbucket ;

Jenkins自动检测到对Bitbucket的新推送并在其上进行构建(要使Jenkins mvn构建通过,我们还需要在运行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"); 现在剩下的唯一事情就是我们需要在我们的程序中使用这些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} 到目前为止没有运气。我们可能没有将这些env变量放在正确的类/文件夹中,或者在中错误地使用了它们application.properties。

非常感谢您的帮助!!

谢谢!

Python
分享到
取消 提交回答
全部回答(1)
  • 保持可爱mmm
    2020-05-10 22:24:01

    您不需要使用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} 但是@Stefan Isele建议的方法更为可取,因为在这种情况下,您只需要声明一个env变量:spring.profiles.active。Spring将通过application-{profile-name}.properties模板自动读取适当的属性文件。来源:stack overflow

    0 0
开发与运维
使用钉钉扫一扫加入圈子
+ 订阅

集结各类场景实战经验,助你开发运维畅行无忧

推荐文章
相似问题
推荐课程