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

2024-02-29

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

  • 我们的设置是我们首先测试它locally(意味着我们需要在我们的PC上安装MySQL);

  • 然后我们推送到 Bitbucket;

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

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

正如您可能已经发现的那样,我们面临的问题是:

  • in application.properties我们不能硬编码 MySQL 信息。由于我们的项目将在 3 个不同的地方运行(local, Jenkins, and 开放式班次),我们需要使数据源字段动态化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, and sqlPort变量为application.properties能够看到它们以及我们如何将它们包含在application.properties?

我们尝试了很多事情其中之一是:

spring.datasource.url = ${sqlURL}:${sqlPort}/"nameofDB"
spring.datasource.username = ${userName}
spring.datasource.password = ${password}

到目前为止还没有运气。我们可能没有将这些环境变量放在正确的类/文件夹中,或者在application.properties.


您不需要使用 java 变量。要包含系统环境变量,请将以下内容添加到您的application.properties file:

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}

但建议的方式@斯特凡·伊塞尔更可取,因为在这种情况下您只需声明一个环境变量:spring.profiles.active。 Spring将自动读取适当的属性文件application-{profile-name}.properties模板。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Spring Boot 的 application.properties 中使用 env 变量 的相关文章

随机推荐

  • 确定当前粘贴板内容的源应用程序

    AppStore 中的多个 OSX 剪贴板管理器显示了确定复制到剪贴板的内容的源应用程序的能力 我正在编写一些简单的剪贴板观察器 并希望在内容附近显示源应用程序图标 存储在通用 NSPasteboard 中 我想知道如何实现这一目标 据我所
  • ValueError:groupby Pandas 中的“无法从重复轴重新索引”

    我的数据框如下所示 SKU GRP CATG PRD 0 54995 9404000 4040 99999 1 54999 9404000 4040 99999 2 55037 9404000 4040 1556894 3 55148 94
  • 串行端口“关闭”事件永远不会触发

    我正在使用nodeJSSerialPort用于连接计算机端口的包 关于套餐close event here https github com EmergingTechnologyAdvisors node serialport module
  • ptr->你好(); /* 与 */ (*ptr).hello();

    我正在学习 C 指针和 gt 操作员对我来说似乎很奇怪 代替ptr gt hello 一个人可以写 ptr hello 因为它似乎也有效 所以我认为前者只是一种更方便的方法 是这样还是有什么区别 gt 运算符是只是语法糖因为 ptr hel
  • jOOQ fetch 与 fetchResultSet 以及 Kotlin 中的关闭连接

    我使用 Kotlin 与 HikariCP 和 jOOQ 来查询我的数据库 我开始意识到这段代码按预期工作 获取行并随后关闭连接 class CountriesService private val datasource DataSourc
  • 正则表达式-如何在字符第一次出现时停止

    我正在尝试从标签中提取 src 值 到目前为止 我似乎能够提取 src 值和字符串中最后一个引号之间的字符串 String img border 0 src http i bookfinder com about booksellers l
  • matplotlib 桑基图中的连接流程

    我正在使用 matplotlibssankey功能 并且在连接两个流时存在问题 基本上 我只想连接流程Qab rekup到流的末尾Qzu rekup 参见屏幕截图 似乎很容易 但我仍然不知道如何管理它 Here s the screensh
  • 在开发系统上禁用 OutputCache

    我在 ASP net MVC 应用程序中使用 OutputCache 由于使用活动的 OutputCache 进行开发并不是很愉快 因此我想禁用开发系统 本地计算机和开发服务器 上的 OutputCache 做这个的最好方式是什么 这是一本
  • 将 df 转换为单独的观察结果[重复]

    这个问题在这里已经有答案了 我想将 df 从 计数 方法 案例数量 转变为 单独观察 方法 Example df lt dplyr tibble city c a a b b c c sex c 1 0 1 0 1 0 age c 1 2
  • 简化具有重复结果的嵌套 if/else?

    我正在尝试简化以下内容 function handleDirection src if src left if inverse tracker else tracker else if inverse tracker else tracke
  • 选择器的“完成”按钮的 Event_Handler

    我有一个包含项目列表的 xamarin 选择器 我想在 iPhone 上按下 完成 按钮和 Android 上按下 确定 按钮时删除选择器 我有删除选择器的代码 但我不知道 event Handler 可能是什么 Code Picker p
  • 安装蓝图时,环境上下文中不允许初始化程序错误

    我正在尝试使用 blueprintjs core我的项目中的库 但是 当我编译代码时 我收到许多这样的错误 node modules blueprintjs core dist common classes d ts 4 30 error
  • C# 中的 XML 多行注释 - 我做错了什么?

    根据本文 http blogs msdn com ansonh archive 2006 09 11 750056 aspx 可以获得多行 XML 注释 而不是使用 use 这是我对多行注释是什么以及我希望发生的情况的解释
  • Visual Studio 2005 清洁解决方案[重复]

    这个问题在这里已经有答案了 如果我有一个包含 10 个项目的解决方案 当我单击 清理解决方案 时 是否只是清理主启动项目解决方案中的 bin debug 或每个项目目录中的 bin debug 它针对当前选定的配置 例如调试 发布等 清理解
  • 在 ng2-select2 中使用 AJAX

    我的 angular2js 项目中有很多下拉菜单 我在用ng2 选择2 https github com NejcZdovc ng2 select2对于这些下拉菜单 在某些下拉列表中 我需要根据用户在 select2 搜索框中输入的字符串来
  • OpenAPI 规范 (YML/YAML):所有 $refs 替换或扩展为其定义(带有模式验证)

    我正在寻找一些解决方案或者一些脚本 可以帮助我通过模式验证替换 ref 或扩展其在 YML 文件中的定义 具体请看下面的例子 示例 使用 ref 输入 pets petId get summary Info for a specific p
  • 识别UIWebview的提交按钮点击

    我有一个带有多个按钮的 UIWebView 页面 需要识别点击的是哪个按钮UIWebView UIWebview加载内容的页面源码
  • 如何获取图片资源

    我应该如何获取imageButton的当前图像资源 我需要这样的东西 imageButton getImageResource 多谢 我认为你不能 当前的 API 不允许这样做 但如果你真的需要这个 你可以这样做 imageButton s
  • 为锦标赛系统分配奖品

    我正在寻找一种将数字分布到 x 个单位的方法 我什至不知道如何表达这个词 所以我举个例子 有一场锦标赛 总奖金为 1000 美元 我希望前 20 名获胜者 参赛者能够从中赢得一些东西 我需要一个数学算法 公式 将其分配给这些玩家 并让我有能
  • 在 Spring Boot 的 application.properties 中使用 env 变量

    我们正在开发一个Spring Boot Web应用程序 我们使用的数据库是MySQL 我们的设置是我们首先测试它locally 意味着我们需要在我们的PC上安装MySQL 然后我们推送到 Bitbucket Jenkins 自动检测到 Bi