Skip to content

Commit

Permalink
Merge pull request #32142 from neilstevenson
Browse files Browse the repository at this point in the history
* pr/32142:
  Polish "Add support for detecting .yml Hazelcast config files"
  Add support for detecting .yml Hazelcast config files

Closes gh-32142
  • Loading branch information
snicoll committed Sep 7, 2022
2 parents cd61d69 + 19c69ff commit 1f535a6
Show file tree
Hide file tree
Showing 10 changed files with 86 additions and 12 deletions.
@@ -1,5 +1,5 @@
/*
* Copyright 2012-2020 the original author or authors.
* Copyright 2012-2022 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
Expand Down Expand Up @@ -39,7 +39,8 @@ class HazelcastClientConfigAvailableCondition extends HazelcastConfigResourceCon

HazelcastClientConfigAvailableCondition() {
super(HazelcastClientConfiguration.CONFIG_SYSTEM_PROPERTY, "file:./hazelcast-client.xml",
"classpath:/hazelcast-client.xml", "file:./hazelcast-client.yaml", "classpath:/hazelcast-client.yaml");
"classpath:/hazelcast-client.xml", "file:./hazelcast-client.yaml", "classpath:/hazelcast-client.yaml",
"file:./hazelcast-client.yml", "classpath:/hazelcast-client.yml");
}

@Override
Expand Down
@@ -1,5 +1,5 @@
/*
* Copyright 2012-2021 the original author or authors.
* Copyright 2012-2022 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
Expand Down Expand Up @@ -72,7 +72,7 @@ HazelcastInstance hazelcastInstance(HazelcastProperties properties, ResourceLoad
private ClientConfig loadClientConfig(Resource configLocation) throws IOException {
URL configUrl = configLocation.getURL();
String configFileName = configUrl.getPath();
if (configFileName.endsWith(".yaml")) {
if (configFileName.endsWith(".yaml") || configFileName.endsWith(".yml")) {
return new YamlClientConfigBuilder(configUrl).build();
}
return new XmlClientConfigBuilder(configUrl).build();
Expand Down
@@ -1,5 +1,5 @@
/*
* Copyright 2012-2021 the original author or authors.
* Copyright 2012-2022 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
Expand Down Expand Up @@ -82,7 +82,7 @@ private Config loadConfig(Resource configLocation) throws IOException {

private static Config loadConfig(URL configUrl) throws IOException {
String configFileName = configUrl.getPath();
if (configFileName.endsWith(".yaml")) {
if (configFileName.endsWith(".yaml") || configFileName.endsWith(".yml")) {
return new YamlConfigBuilder(configUrl).build();
}
return new XmlConfigBuilder(configUrl).build();
Expand All @@ -109,7 +109,7 @@ static class ConfigAvailableCondition extends HazelcastConfigResourceCondition {

ConfigAvailableCondition() {
super(CONFIG_SYSTEM_PROPERTY, "file:./hazelcast.xml", "classpath:/hazelcast.xml", "file:./hazelcast.yaml",
"classpath:/hazelcast.yaml");
"classpath:/hazelcast.yaml", "file:./hazelcast.yml", "classpath:/hazelcast.yml");
}

}
Expand Down
@@ -1,5 +1,5 @@
/*
* Copyright 2012-2021 the original author or authors.
* Copyright 2012-2022 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
Expand Down Expand Up @@ -81,6 +81,14 @@ void systemPropertyWithYaml() {
.run(assertSpecificHazelcastClient("explicit-yaml"));
}

@Test
void systemPropertyWithYml() {
this.contextRunner
.withSystemProperties(HazelcastClientConfiguration.CONFIG_SYSTEM_PROPERTY
+ "=classpath:org/springframework/boot/autoconfigure/hazelcast/hazelcast-client-specific.yml")
.run(assertSpecificHazelcastClient("explicit-yml"));
}

@Test
void explicitConfigFileWithXml() {
this.contextRunner.withPropertyValues("spring.hazelcast.config=org/springframework/boot/autoconfigure/"
Expand All @@ -95,6 +103,12 @@ void explicitConfigFileWithYaml() {
.run(assertSpecificHazelcastClient("explicit-yaml"));
}

@Test
void explicitConfigFileWithYml() {
this.contextRunner.withPropertyValues("spring.hazelcast.config=org/springframework/boot/autoconfigure/"
+ "hazelcast/hazelcast-client-specific.yml").run(assertSpecificHazelcastClient("explicit-yml"));
}

@Test
void explicitConfigUrlWithXml() {
this.contextRunner
Expand All @@ -111,6 +125,14 @@ void explicitConfigUrlWithYaml() {
.run(assertSpecificHazelcastClient("explicit-yaml"));
}

@Test
void explicitConfigUrlWithYml() {
this.contextRunner
.withPropertyValues("spring.hazelcast.config=classpath:org/springframework/"
+ "boot/autoconfigure/hazelcast/hazelcast-client-specific.yml")
.run(assertSpecificHazelcastClient("explicit-yml"));
}

@Test
void unknownConfigFile() {
this.contextRunner.withPropertyValues("spring.hazelcast.config=foo/bar/unknown.xml")
Expand Down
Expand Up @@ -79,6 +79,17 @@ void systemPropertyWithYaml() {
});
}

@Test
void systemPropertyWithYml() {
this.contextRunner
.withSystemProperties(HazelcastServerConfiguration.CONFIG_SYSTEM_PROPERTY
+ "=classpath:org/springframework/boot/autoconfigure/hazelcast/hazelcast-specific.yml")
.run((context) -> {
Config config = context.getBean(HazelcastInstance.class).getConfig();
assertThat(config.getMapConfigs().keySet()).containsOnly("foobar");
});
}

@Test
void explicitConfigFileWithXml() {
this.contextRunner
Expand All @@ -97,6 +108,15 @@ void explicitConfigFileWithYaml() {
"org/springframework/boot/autoconfigure/hazelcast/hazelcast-specific.yaml"));
}

@Test
void explicitConfigFileWithYml() {
this.contextRunner
.withPropertyValues("spring.hazelcast.config=org/springframework/boot/autoconfigure/hazelcast/"
+ "hazelcast-specific.yml")
.run(assertSpecificHazelcastServer(
"org/springframework/boot/autoconfigure/hazelcast/hazelcast-specific.yml"));
}

@Test
void explicitConfigUrlWithXml() {
this.contextRunner
Expand All @@ -115,6 +135,15 @@ void explicitConfigUrlWithYaml() {
"org/springframework/boot/autoconfigure/hazelcast/hazelcast-specific.yaml"));
}

@Test
void explicitConfigUrlWithYml() {
this.contextRunner
.withPropertyValues("spring.hazelcast.config=classpath:org/springframework/"
+ "boot/autoconfigure/hazelcast/hazelcast-specific.yml")
.run(assertSpecificHazelcastServer(
"org/springframework/boot/autoconfigure/hazelcast/hazelcast-specific.yml"));
}

private ContextConsumer<AssertableApplicationContext> assertSpecificHazelcastServer(String location) {
return (context) -> {
Config config = context.getBean(HazelcastInstance.class).getConfig();
Expand Down
@@ -1,5 +1,5 @@
/*
* Copyright 2012-2020 the original author or authors.
* Copyright 2012-2022 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
Expand Down Expand Up @@ -45,7 +45,7 @@ class HazelcastAutoConfigurationTests {
void defaultConfigFile() {
// no hazelcast-client.xml and hazelcast.xml is present in root classpath
// this also asserts that XML has priority over YAML
// as both hazelcast.yaml and hazelcast.xml in test classpath.
// as hazelcast.yaml, hazelcast.yml, and hazelcast.xml are available.
this.contextRunner.run((context) -> {
Config config = context.getBean(HazelcastInstance.class).getConfig();
assertThat(config.getConfigurationUrl()).isEqualTo(new ClassPathResource("hazelcast.xml").getURL());
Expand Down
@@ -0,0 +1,7 @@
hazelcast:
network:
join:
auto-detection:
enabled: false
multicast:
enabled: false
@@ -0,0 +1,3 @@
hazelcast-client:
client-labels:
- explicit-yml
@@ -0,0 +1,12 @@
hazelcast:
network:
join:
auto-detection:
enabled: false
multicast:
enabled: false

map:
foobar:
time-to-live-seconds: 3600
max-idle-seconds: 600
Expand Up @@ -8,7 +8,7 @@ Spring Boot first attempts to create a client by checking the following configur
* A configuration file defined by the configprop:spring.hazelcast.config[] property.
* The presence of the `hazelcast.client.config` system property.
* A `hazelcast-client.xml` in the working directory or at the root of the classpath.
* A `hazelcast-client.yaml` in the working directory or at the root of the classpath.
* A `hazelcast-client.yaml` (or `hazelcast-client.yml`) in the working directory or at the root of the classpath.

NOTE: Spring Boot supports both Hazelcast 4 and Hazelcast 3.
If you downgrade to Hazelcast 3, `hazelcast-client` should be added to the classpath to configure a client.
Expand All @@ -26,7 +26,7 @@ You could also specify the Hazelcast configuration file to use through configura
config: "classpath:config/my-hazelcast.xml"
----

Otherwise, Spring Boot tries to find the Hazelcast configuration from the default locations: `hazelcast.xml` in the working directory or at the root of the classpath, or a `.yaml` counterpart in the same locations.
Otherwise, Spring Boot tries to find the Hazelcast configuration from the default locations: `hazelcast.xml` in the working directory or at the root of the classpath, or a `.yaml`/`.yml` counterpart in the same locations.
We also check if the `hazelcast.config` system property is set.
See the https://docs.hazelcast.org/docs/latest/manual/html-single/[Hazelcast documentation] for more details.

Expand Down

0 comments on commit 1f535a6

Please sign in to comment.