From 41720ca93d7f4798ddcf9d57c89d6f0a0840bed5 Mon Sep 17 00:00:00 2001 From: Stephane Nicoll Date: Thu, 14 Dec 2017 10:01:57 +0100 Subject: [PATCH] Improve extension of Neo4jHealthIndicator This commit makes it easier to extend `Neo4jHealthIndicator` for cases where a custom cypher needs to be executed. Closes gh-11120 --- ...HealthIndicatorAutoConfigurationTests.java | 35 +++++++++++++++++-- .../actuate/neo4j/Neo4jHealthIndicator.java | 10 ++++++ 2 files changed, 42 insertions(+), 3 deletions(-) diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/neo4j/Neo4jHealthIndicatorAutoConfigurationTests.java b/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/neo4j/Neo4jHealthIndicatorAutoConfigurationTests.java index 0e0694d20a..a8e3c77422 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/neo4j/Neo4jHealthIndicatorAutoConfigurationTests.java +++ b/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/neo4j/Neo4jHealthIndicatorAutoConfigurationTests.java @@ -17,29 +17,33 @@ package org.springframework.boot.actuate.autoconfigure.neo4j; import org.junit.Test; +import org.neo4j.ogm.session.Session; import org.neo4j.ogm.session.SessionFactory; import org.springframework.boot.actuate.autoconfigure.health.HealthIndicatorAutoConfiguration; import org.springframework.boot.actuate.health.ApplicationHealthIndicator; +import org.springframework.boot.actuate.health.Health; import org.springframework.boot.actuate.neo4j.Neo4jHealthIndicator; import org.springframework.boot.autoconfigure.AutoConfigurations; -import org.springframework.boot.autoconfigure.AutoConfigureBefore; import org.springframework.boot.test.context.runner.ApplicationContextRunner; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.entry; import static org.mockito.Mockito.mock; /** * Tests for {@link Neo4jHealthIndicatorAutoConfiguration}. * * @author Phillip Webb + * @author Stephane Nicoll */ public class Neo4jHealthIndicatorAutoConfigurationTests { private ApplicationContextRunner contextRunner = new ApplicationContextRunner() - .withConfiguration(AutoConfigurations.of(Neo4jConfiguration.class, + .withUserConfiguration(Neo4jConfiguration.class) + .withConfiguration(AutoConfigurations.of( Neo4jHealthIndicatorAutoConfiguration.class, HealthIndicatorAutoConfiguration.class)); @@ -58,8 +62,19 @@ public class Neo4jHealthIndicatorAutoConfigurationTests { .hasSingleBean(ApplicationHealthIndicator.class)); } + @Test + public void defaultIndicatorCanBeReplaced() { + this.contextRunner + .withUserConfiguration(CustomIndicatorConfiguration.class).run( + (context) -> { + assertThat(context).hasSingleBean(Neo4jHealthIndicator.class); + assertThat(context).doesNotHaveBean(ApplicationHealthIndicator.class); + Health health = context.getBean(Neo4jHealthIndicator.class).health(); + assertThat(health.getDetails()).containsOnly(entry("test", true)); + }); + } + @Configuration - @AutoConfigureBefore(Neo4jHealthIndicatorAutoConfiguration.class) protected static class Neo4jConfiguration { @Bean @@ -69,4 +84,18 @@ public class Neo4jHealthIndicatorAutoConfigurationTests { } + @Configuration + protected static class CustomIndicatorConfiguration { + + @Bean + public Neo4jHealthIndicator neo4jHealthIndicator(SessionFactory sessionFactory) { + return new Neo4jHealthIndicator(sessionFactory) { + @Override + protected void extractResult(Session session, Health.Builder builder) { + builder.up().withDetail("test", true); + } + }; + } + } + } diff --git a/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/neo4j/Neo4jHealthIndicator.java b/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/neo4j/Neo4jHealthIndicator.java index 43fb70f32d..ca84ff1f97 100644 --- a/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/neo4j/Neo4jHealthIndicator.java +++ b/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/neo4j/Neo4jHealthIndicator.java @@ -55,6 +55,16 @@ public class Neo4jHealthIndicator extends AbstractHealthIndicator { @Override protected void doHealthCheck(Health.Builder builder) throws Exception { Session session = this.sessionFactory.openSession(); + extractResult(session, builder); + } + + /** + * Provide health details using the specified {@link Session} and + * {@link Health.Builder Builder}. + * @param session the session to use to execute a cypher statement + * @param builder the builder to add details to + */ + protected void extractResult(Session session, Health.Builder builder) { Result result = session.query(CYPHER, Collections.emptyMap()); builder.up().withDetail("nodes", result.queryResults().iterator().next().get("nodes"));