diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/pom.xml b/spring-boot-project/spring-boot-actuator-autoconfigure/pom.xml index 394fa29dac8..9783a666d28 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure/pom.xml +++ b/spring-boot-project/spring-boot-actuator-autoconfigure/pom.xml @@ -64,11 +64,6 @@ hazelcast-spring true - - com.hazelcast - hazelcast-client - test - com.sun.mail jakarta.mail diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/hazelcast/package-info.java b/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/hazelcast/package-info.java index 58d63614e04..cf59117c4e0 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/hazelcast/package-info.java +++ b/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/hazelcast/package-info.java @@ -15,6 +15,6 @@ */ /** - * Auto-configuration for Hazelcast's actuator. + * Auto-configuration for actuator Hazelcast concerns. */ package org.springframework.boot.actuate.autoconfigure.hazelcast; diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/hazelcast/HazelcastHealthIndicatorAutoConfigurationIntegrationTests.java b/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/hazelcast/HazelcastHealthIndicatorAutoConfigurationIntegrationTests.java index 8056ceef9b5..da8cb533b36 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/hazelcast/HazelcastHealthIndicatorAutoConfigurationIntegrationTests.java +++ b/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/hazelcast/HazelcastHealthIndicatorAutoConfigurationIntegrationTests.java @@ -16,11 +16,7 @@ package org.springframework.boot.actuate.autoconfigure.hazelcast; -import com.hazelcast.client.config.ClientConfig; -import com.hazelcast.config.Config; -import com.hazelcast.core.Hazelcast; import com.hazelcast.core.HazelcastInstance; -import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.Test; import org.springframework.boot.actuate.autoconfigure.health.HealthIndicatorAutoConfiguration; @@ -40,17 +36,10 @@ import static org.assertj.core.api.Assertions.assertThat; */ class HazelcastHealthIndicatorAutoConfigurationIntegrationTests { - private final HazelcastInstance hazelcastServer = Hazelcast.newHazelcastInstance(new Config()); - - private ApplicationContextRunner contextRunner = new ApplicationContextRunner().withBean(ClientConfig.class) + private ApplicationContextRunner contextRunner = new ApplicationContextRunner() .withConfiguration(AutoConfigurations.of(HazelcastHealthIndicatorAutoConfiguration.class, HazelcastAutoConfiguration.class, HealthIndicatorAutoConfiguration.class)); - @AfterEach - void shutdown() { - this.hazelcastServer.shutdown(); - } - @Test void hazelcastUp() { this.contextRunner.run((context) -> { @@ -66,7 +55,7 @@ class HazelcastHealthIndicatorAutoConfigurationIntegrationTests { @Test void hazelcastDown() { this.contextRunner.run((context) -> { - shutdown(); + context.getBean(HazelcastInstance.class).shutdown(); assertThat(context).hasSingleBean(HazelcastHealthIndicator.class); Health health = context.getBean(HazelcastHealthIndicator.class).health(); assertThat(health.getStatus()).isEqualTo(Status.DOWN); diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/hazelcast/HazelcastHealthIndicatorAutoConfigurationTests.java b/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/hazelcast/HazelcastHealthIndicatorAutoConfigurationTests.java index a980c6db548..3e9e980776f 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/hazelcast/HazelcastHealthIndicatorAutoConfigurationTests.java +++ b/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/hazelcast/HazelcastHealthIndicatorAutoConfigurationTests.java @@ -48,7 +48,6 @@ class HazelcastHealthIndicatorAutoConfigurationTests { void runWhenDisabledShouldNotCreateIndicator() { this.contextRunner.withPropertyValues("management.health.hazelcast.enabled:false") .run((context) -> assertThat(context).doesNotHaveBean(HazelcastHealthIndicator.class) - .doesNotHaveBean(HazelcastHealthIndicator.class) .hasSingleBean(ApplicationHealthIndicator.class)); } diff --git a/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/hazelcast/HazelcastHealthIndicator.java b/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/hazelcast/HazelcastHealthIndicator.java index 42d531b5d92..d2c23f3a736 100644 --- a/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/hazelcast/HazelcastHealthIndicator.java +++ b/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/hazelcast/HazelcastHealthIndicator.java @@ -16,12 +16,7 @@ package org.springframework.boot.actuate.hazelcast; -import java.util.LinkedHashMap; -import java.util.Map; - -import com.hazelcast.core.Endpoint; import com.hazelcast.core.HazelcastInstance; -import com.hazelcast.transaction.TransactionalTask; import org.springframework.boot.actuate.health.AbstractHealthIndicator; import org.springframework.boot.actuate.health.Health; @@ -29,15 +24,14 @@ import org.springframework.boot.actuate.health.HealthIndicator; import org.springframework.util.Assert; /** - * {@link HealthIndicator} for a Hazelcast. + * {@link HealthIndicator} for Hazelcast. * * @author Dmytro Nosan + * @author Stephane Nicoll * @since 2.2.0 */ public class HazelcastHealthIndicator extends AbstractHealthIndicator { - private static final TransactionalTask TASK = (context) -> null; - private final HazelcastInstance hazelcast; public HazelcastHealthIndicator(HazelcastInstance hazelcast) { @@ -48,16 +42,11 @@ public class HazelcastHealthIndicator extends AbstractHealthIndicator { @Override protected void doHealthCheck(Health.Builder builder) { - this.hazelcast.executeTransaction(TASK); - builder.up().withDetails(getDetails()); - } - - private Map getDetails() { - Map details = new LinkedHashMap<>(); - Endpoint endpoint = this.hazelcast.getLocalEndpoint(); - details.put("name", this.hazelcast.getName()); - details.put("uuid", endpoint.getUuid()); - return details; + this.hazelcast.executeTransaction((context) -> { + builder.up().withDetail("name", this.hazelcast.getName()).withDetail("uuid", + this.hazelcast.getLocalEndpoint().getUuid()); + return null; + }); } } diff --git a/spring-boot-project/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/hazelcast/HazelcastHealthIndicatorTests.java b/spring-boot-project/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/hazelcast/HazelcastHealthIndicatorTests.java index a8dd1d2841a..1340e6058f5 100644 --- a/spring-boot-project/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/hazelcast/HazelcastHealthIndicatorTests.java +++ b/spring-boot-project/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/hazelcast/HazelcastHealthIndicatorTests.java @@ -19,6 +19,7 @@ package org.springframework.boot.actuate.hazelcast; import com.hazelcast.core.Endpoint; import com.hazelcast.core.HazelcastException; import com.hazelcast.core.HazelcastInstance; +import com.hazelcast.transaction.TransactionalTask; import org.junit.jupiter.api.Test; import org.springframework.boot.actuate.health.Health; @@ -33,22 +34,23 @@ import static org.mockito.Mockito.mock; * Tests for {@link HazelcastHealthIndicator}. * * @author Dmytro Nosan + * @author Stephane Nicoll */ class HazelcastHealthIndicatorTests { private final HazelcastInstance hazelcast = mock(HazelcastInstance.class); - private final HazelcastHealthIndicator healthIndicator = new HazelcastHealthIndicator(this.hazelcast); - @Test void hazelcastUp() { Endpoint endpoint = mock(Endpoint.class); when(this.hazelcast.getName()).thenReturn("hz0-instance"); when(this.hazelcast.getLocalEndpoint()).thenReturn(endpoint); when(endpoint.getUuid()).thenReturn("7581bb2f-879f-413f-b574-0071d7519eb0"); - - Health health = this.healthIndicator.health(); - + when(this.hazelcast.executeTransaction(any())).thenAnswer((invocation) -> { + TransactionalTask task = invocation.getArgument(0); + return task.execute(null); + }); + Health health = new HazelcastHealthIndicator(this.hazelcast).health(); assertThat(health.getStatus()).isEqualTo(Status.UP); assertThat(health.getDetails()).containsOnlyKeys("name", "uuid").containsEntry("name", "hz0-instance") .containsEntry("uuid", "7581bb2f-879f-413f-b574-0071d7519eb0"); @@ -57,9 +59,7 @@ class HazelcastHealthIndicatorTests { @Test void hazelcastDown() { when(this.hazelcast.executeTransaction(any())).thenThrow(new HazelcastException()); - - Health health = this.healthIndicator.health(); - + Health health = new HazelcastHealthIndicator(this.hazelcast).health(); assertThat(health.getStatus()).isEqualTo(Status.DOWN); } diff --git a/spring-boot-project/spring-boot-docs/src/main/asciidoc/production-ready-features.adoc b/spring-boot-project/spring-boot-docs/src/main/asciidoc/production-ready-features.adoc index 209e94f8053..24c1576c42d 100644 --- a/spring-boot-project/spring-boot-docs/src/main/asciidoc/production-ready-features.adoc +++ b/spring-boot-project/spring-boot-docs/src/main/asciidoc/production-ready-features.adoc @@ -764,6 +764,9 @@ The following `HealthIndicators` are auto-configured by Spring Boot when appropr |{sc-spring-boot-actuator}/elasticsearch/ElasticsearchHealthIndicator.{sc-ext}[`ElasticsearchHealthIndicator`] |Checks that an Elasticsearch cluster is up. +|{sc-spring-boot-actuator}/hazelcast/HazelcastHealthIndicator.{sc-ext}[`HazelcastHealthIndicator`] +|Checks that an Hazelcast server is up. + |{sc-spring-boot-actuator}/influx/InfluxDbHealthIndicator.{sc-ext}[`InfluxDbHealthIndicator`] |Checks that an InfluxDB server is up.