【问题标题】:Spring Boot : approach to have global access to properties loaded from a custom property tableSpring Boot:全局访问从自定义属性表加载的属性的方法
【发布时间】:2021-08-10 10:02:15
【问题描述】:

背景:我不想在 java 常量文件中硬编码属性,因为每次我想更改为 property_value 之一时,我都必须再次构建和部署整个代码。我什至不想将它们保存在 application.yaml/application.properties 文件中,因为我的属性数量庞大(100 个)。所以,我决定在 oracle DB 的属性表中维护属性。

我可以想到两种方法:

  1. 在需要时通过触发 sql 查询读取属性值。
  2. 在启动应用程序时加载所有/部分属性,并通过缓存它们获得全局访问点。

由于我一开始就需要很少的属性,所以我想使用方法 2。

我想选择单例 bean,但这需要我一开始就知道所有的键(属性名称),并且使单例看起来很丑,有 100 个成员变量。在这里,我打算使用 spring bean 的预构造函数来触发查询。这里的主要问题是每次我从属性表中添加/删除属性时都需要更改 bean。

我能想到的另一种方法是使用 Map,因为我的表的 property_name 和 property_value 列都是 VARCHAR 类型。但问题是我怎样才能获得这张地图的全球访问点?

非常感谢任何更好的方法!

在此先感谢

【问题讨论】:

    标签: java spring-boot


    【解决方案1】:

    如果您将应用部署在 Web 服务器上,您可以利用它。许多 Web 服务器支持动态更改配置(使用 Web 控制台),例如 JBoss EAP。

    另一个想法是构建自己的属性库。创建一个读取数据的函数。我更喜欢使用 NoSQL 数据库而不是 RDBMS,因为它轻量级、出色的性能和非常好的可扩展性。我不会使用缓存,除非它持久存在并且可用性良好。

    我听说过Spring Cloud Config 用于外部化配置,但我从未深入研究过。

    我们中的一些人使用支持属性重新加载的 Apache Commons 配置。看看this thread

    【讨论】:

    • 感谢您的回答!我不能选择 JBoss EAP,因为我只能在我的应用程序中使用嵌入式 jetty/tomcat。此外,我不能仅将 NoSQL db 用于此特定要求。 Spring cloud config server 有维护它的开销(作为一个单独的服务),当你想在一个集中的地方外部化多个微服务的配置时通常很有帮助。
    猜你喜欢
    • 2020-10-26
    • 2023-02-20
    • 1970-01-01
    • 1970-01-01
    • 2019-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多