【问题标题】:Configuring Hazelcast via Spring Boot application.yml通过 Spring Boot application.yml 配置 Hazelcast
【发布时间】:2018-09-24 04:36:18
【问题描述】:

我能够使用 hazelcast.xml 文件在我的 Spring Boot 应用程序中使用 Hazelcast 缓存。但是,该应用程序有多个配置文件,我试图避免管理多个 hazelcast.xml 文件。我想配置 application.yml 中的所有选项。如果我正确理解the documentation,我应该能够在我的application.yml 中执行以下操作,对吗?

hazelcast:
  client:
    config:
      network:
        join:
          tcp-ip:
            member:
              - 1.2.3.4
              - 9.8.7.6
      map:
        name: user-details
        max-size: 1000
        eviction-policy: LRU
        eviction-percentage: 10
        time-to-live-seconds: 900

除非它不工作。我尝试通过 application.yml 找到其他有关配置 Hazelcast 的参考,但没有找到。我想做的事是不可能的吗?

【问题讨论】:

    标签: java spring spring-boot hazelcast


    【解决方案1】:

    application.yml 文件是一种将配置属性传递给 Spring Boot 的方法。目前,没有一种自动的方式将这些从一个传递到另一个。

    因此,您尝试执行的操作不会按原样进行。也许这值得您在 https://github.com/hazelcast/hazelcasthttps://github.com/spring-projects/spring-boot 上记录问题以便解决。

    与此同时,如果您有一个 application.yml 的属性,例如

    hazelcast:
     group:
      name: "stack.overflow"
    

    然后这将作为hazelcast.group.name属性放入Spring的环境中。

    你有一个 hazelcast.xml 包含

    <group>
        <name>${hazelcast.group.name}</name>
    </group>
    

    然后“all”你需要做的是让你的代码像这样创建一个Config@Bean

    @Bean
    public Config config(Environment environment) {
        Properties props = new Properties();
        props.put("hazelcast.group.name", environment.getProperty("hazelcast.group.name"));
        return new ClasspathXmlConfig("hazelcast.xml", props);
    }
    

    将 YML 文件中的属性传递到 XML 文件中。

    【讨论】:

    • 如果您需要更多信息,请告诉我。这里的底线是 Spring 比任何事情都需要付出更多的努力。
    • 我尝试了你的建议,但看起来自动配置在配置 bean 运行之前从类路径中获取 hazelcast.xml?它说“在节点上找不到属性'hazelcast.group'的值:null”。我已确认该属性存在于我的 application-local.yml 中,并且我正在运行本地配置文件。
    • 没关系,我明白了。不得不将@Bean 放在我的顶级配置类中。似乎现在可以工作了,谢谢!
    【解决方案2】:

    我遇到了同样的问题并为此添加了一个配置类:

    @Configuration
    @EnableConfigurationProperties(HazelcastConfig::class)
    @ConfigurationProperties(prefix = "hazelcast", ignoreUnknownFields = false)
    @Primary
    class HazelcastConfig: Config()
    

    然后我把它放在 application.yml 中:

    hazelcast:
      group_config:
        name: hazelcast-cluster
        password: hazelcast-cluster
      network_config:
        join:
          multicast_config:
            enabled: false
          kubernetes_config:
            enabled: false
    

    (是的,我知道这是一个老问题,但根据 Google 的说法它是最受欢迎的)

    【讨论】:

      猜你喜欢
      • 2017-05-24
      • 2018-03-24
      • 2019-07-17
      • 2019-05-19
      • 1970-01-01
      • 2020-09-19
      • 2018-12-30
      • 2020-01-09
      相关资源
      最近更新 更多