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
This commit is contained in:
parent
797ad13bfa
commit
41720ca93d
|
@ -17,29 +17,33 @@
|
||||||
package org.springframework.boot.actuate.autoconfigure.neo4j;
|
package org.springframework.boot.actuate.autoconfigure.neo4j;
|
||||||
|
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
|
import org.neo4j.ogm.session.Session;
|
||||||
import org.neo4j.ogm.session.SessionFactory;
|
import org.neo4j.ogm.session.SessionFactory;
|
||||||
|
|
||||||
import org.springframework.boot.actuate.autoconfigure.health.HealthIndicatorAutoConfiguration;
|
import org.springframework.boot.actuate.autoconfigure.health.HealthIndicatorAutoConfiguration;
|
||||||
import org.springframework.boot.actuate.health.ApplicationHealthIndicator;
|
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.actuate.neo4j.Neo4jHealthIndicator;
|
||||||
import org.springframework.boot.autoconfigure.AutoConfigurations;
|
import org.springframework.boot.autoconfigure.AutoConfigurations;
|
||||||
import org.springframework.boot.autoconfigure.AutoConfigureBefore;
|
|
||||||
import org.springframework.boot.test.context.runner.ApplicationContextRunner;
|
import org.springframework.boot.test.context.runner.ApplicationContextRunner;
|
||||||
import org.springframework.context.annotation.Bean;
|
import org.springframework.context.annotation.Bean;
|
||||||
import org.springframework.context.annotation.Configuration;
|
import org.springframework.context.annotation.Configuration;
|
||||||
|
|
||||||
import static org.assertj.core.api.Assertions.assertThat;
|
import static org.assertj.core.api.Assertions.assertThat;
|
||||||
|
import static org.assertj.core.api.Assertions.entry;
|
||||||
import static org.mockito.Mockito.mock;
|
import static org.mockito.Mockito.mock;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Tests for {@link Neo4jHealthIndicatorAutoConfiguration}.
|
* Tests for {@link Neo4jHealthIndicatorAutoConfiguration}.
|
||||||
*
|
*
|
||||||
* @author Phillip Webb
|
* @author Phillip Webb
|
||||||
|
* @author Stephane Nicoll
|
||||||
*/
|
*/
|
||||||
public class Neo4jHealthIndicatorAutoConfigurationTests {
|
public class Neo4jHealthIndicatorAutoConfigurationTests {
|
||||||
|
|
||||||
private ApplicationContextRunner contextRunner = new ApplicationContextRunner()
|
private ApplicationContextRunner contextRunner = new ApplicationContextRunner()
|
||||||
.withConfiguration(AutoConfigurations.of(Neo4jConfiguration.class,
|
.withUserConfiguration(Neo4jConfiguration.class)
|
||||||
|
.withConfiguration(AutoConfigurations.of(
|
||||||
Neo4jHealthIndicatorAutoConfiguration.class,
|
Neo4jHealthIndicatorAutoConfiguration.class,
|
||||||
HealthIndicatorAutoConfiguration.class));
|
HealthIndicatorAutoConfiguration.class));
|
||||||
|
|
||||||
|
@ -58,8 +62,19 @@ public class Neo4jHealthIndicatorAutoConfigurationTests {
|
||||||
.hasSingleBean(ApplicationHealthIndicator.class));
|
.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
|
@Configuration
|
||||||
@AutoConfigureBefore(Neo4jHealthIndicatorAutoConfiguration.class)
|
|
||||||
protected static class Neo4jConfiguration {
|
protected static class Neo4jConfiguration {
|
||||||
|
|
||||||
@Bean
|
@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);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -55,6 +55,16 @@ public class Neo4jHealthIndicator extends AbstractHealthIndicator {
|
||||||
@Override
|
@Override
|
||||||
protected void doHealthCheck(Health.Builder builder) throws Exception {
|
protected void doHealthCheck(Health.Builder builder) throws Exception {
|
||||||
Session session = this.sessionFactory.openSession();
|
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());
|
Result result = session.query(CYPHER, Collections.emptyMap());
|
||||||
builder.up().withDetail("nodes",
|
builder.up().withDetail("nodes",
|
||||||
result.queryResults().iterator().next().get("nodes"));
|
result.queryResults().iterator().next().get("nodes"));
|
||||||
|
|
Loading…
Reference in New Issue