【问题标题】:Spring Boot Externalized Configuration from Database来自数据库的 Spring Boot 外部化配置
【发布时间】:2015-05-30 13:07:45
【问题描述】:

我有一个 Spring Boot 应用程序,它使用默认的 application.yml 来定义配置属性。目前,该文件包含一些特定于环境的信息,例如 SMTP 服务器详细信息,我想将其外部化到数据库表中。我尝试在http://www.javacodegeeks.com/2012/11/spring-3-1-loading-properties-for-xml-configuration-from-database.html 处修改为传统 Spring 应用程序给出的示例,但到目前为止还没有运气。

使用 Spring Boot 执行此操作的最佳方法是什么?

【问题讨论】:

  • 我之前玩过 Spring Cloud,感觉对于我的场景来说有点过分了。在这种特殊情况下,我不希望为此运行单独的服务,并且也希望避免为此设置 Git 存储库。我的另一个要求是让用户使用 UI 修改这些,所以我希望尽可能将其存储在数据库中。

标签: spring spring-boot


【解决方案1】:

Spring Boot 和 Heroku 等部署平台推荐的方法是提供特定于环境的覆盖作为 linux 环境变量。

将它们存储在数据库中的一个缺点是,如果您曾经备份生产数据库并将其恢复到其他环境,它将尝试连接到您的生产邮件服务器/数据库等...

使用 Spring Boot,任何属性都可以被环境变量覆盖。

我自己做的另一件事让我非常满意,我将我的一些属性设置为一个特殊的值,例如“MUST_PASS_IN”或类似的东西,并且在启动时,我对所有属性进行了循环如果其中任何一个具有该值,我会停止应用程序并将其打印出来。这样我保证我不会忘记在环境中传递一些覆盖。

【讨论】:

  • 这种方法不能满足我允许用户通过 UI 修改它的要求,但我想这是迄今为止最好的答案。
  • 我猜 SMTP 是一个不好的例子 :) 我们想让管理员通过 UI 更改一些其他参数,例如我们拥有的某些调度程序的 cron 表达式、调整日志级别等。跨度>
  • @YohanLiyanage,你应该发布你的答案和你修复它的方式
  • @FedericoPiazza 我们最终使用了 Spring Cloud Config Server。我们决定使用保存历史记录的 Git 后端是配置文件的理想选择。我们的应用程序的其他一些要求也发生了变化,我们也必须添加其他 Spring Cloud 服务,因此 Config Server 成为我们可行的解决方案。
猜你喜欢
  • 1970-01-01
  • 2019-08-17
  • 2021-01-05
  • 2013-12-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多