通过 Spring Boot application.yml 配置 Hazelcast

Der*_*rek 4 java spring hazelcast spring-boot

我能够使用 hazelcast.xml 文件在我的 Spring Boot 应用程序中使用 Hazelcast 缓存。但是,该应用程序有多个配置文件,我试图避免管理多个 hazelcast.xml 文件。我想配置 application.yml 中的所有选项。如果我正确理解文档,我应该能够在 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
Run Code Online (Sandbox Code Playgroud)

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

Mil*_*Zee 6

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

@Configuration
@EnableConfigurationProperties(HazelcastConfig::class)
@ConfigurationProperties(prefix = "hazelcast", ignoreUnknownFields = false)
@Primary
class HazelcastConfig: Config()
Run Code Online (Sandbox Code Playgroud)

然后我将其放入 application.yml 中:

hazelcast:
  group_config:
    name: hazelcast-cluster
    password: hazelcast-cluster
  network_config:
    join:
      multicast_config:
        enabled: false
      kubernetes_config:
        enabled: false
Run Code Online (Sandbox Code Playgroud)

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


小智 5

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

所以你想做的事情不会按原样进行。也许值得您在https://github.com/hazelcast/hazelcasthttps://github.com/spring-projects/spring-boot上记录问题以使其得到解决。

与此同时,如果您拥有application.yml以下财产:

hazelcast:
 group:
  name: "stack.overflow"
Run Code Online (Sandbox Code Playgroud)

那么这将作为属性放入 Spring 的环境中hazelcast.group.name

你有一个hazelcast.xml包含

<group>
    <name>${hazelcast.group.name}</name>
</group>
Run Code Online (Sandbox Code Playgroud)

那么“所有”你需要做的就是让你的代码创建一个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);
}
Run Code Online (Sandbox Code Playgroud)

将属性从 YML 文件传递​​到 XML 文件。