【问题标题】:@Region annotation when using Spring Data Gemfire使用 Spring Data Gemfire 时的 @Region 注释
【发布时间】:2014-02-06 11:16:39
【问题描述】:

我正在使用 Spring Data 和 Gemfire 开发数据服务。 有注释

@Region("<region name>")

指定 POJO 将存储在哪个 Gemfire 区域。

它需要配置的 Gemfire 区域的名称。 我觉得硬编码区域名称是一种不好的做法,因为 Gemfire 集群将由一个单独的团队管理,我相信区域名称应该是完全可配置的。

有没有更好的做法来避免对区域名称进行硬编码?

【问题讨论】:

    标签: java spring spring-data gemfire spring-data-gemfire


    【解决方案1】:

    区域名称必须由访问该区域的所有进程共享。这类似于关系数据库中的表名。从这个意义上说,它与声明将存储 POJO 的表名的 JPA 或 Hibernate 注释没有什么不同。 IIRC,使用 Spring Data Repositories,如果 @Region 不存在,它将从类名中获取它。但无论哪种方式,相应的区域都必须存在。如果您的应用程序是 GemFire 网格的客户端,您还必须配置一个与服务器上相应区域同名的客户端区域。如果它是对等点,则必须创建区域(分区或副本)。这些事情可以通过 Spring 配置或原生 GemFire 配置来完成,但无论如何,共享区域名称必须提前知道,如果它改变,它必须在任何地方都改变。

    【讨论】:

    • 不确定它是否回答了我的问题。我希望至少能够从属性文件中加载区域名称。不喜欢在源代码中硬编码名称的想法。
    【解决方案2】:

    能否使用 Spring 表达式语言注入 Region 的名称?

    我们将一个基于 XML 文件的配置 bean 中的值注入到 @Value 注释中,例如:

    @Value("#{config.dataSourceConfig.dbMainUsername}")
    

    其中“config”是配置 bean 的名称。

    不确定这是否适用于所有注释...

    【讨论】:

    • 你有这方面的阅读材料吗?我需要避免对注释中传入的值进行硬编码。 Tnx
    【解决方案3】:

    总的来说,我认为在应用程序域对象的@Region 注释中指定区域的名称/路径不一定是不好的做法;它肯定要明确得多。

    但是,我可以理解使这些东西可配置的必要性,也许当您从 1 个 env(例如 DEV)升级到另一个(例如 PROD)时。因此,请参阅最近的更改...

    SGF-261 - 允许将应用程序域对象/实体持久化到 GemFire 缓存中的多个区域

    除了这个提议,未来的变化......

    SGF-262.

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-05
      • 1970-01-01
      • 1970-01-01
      • 2012-03-08
      相关资源
      最近更新 更多