Skip to content

Commit 01272fa

Browse files
committed
Polish "Add health indicator for Neo4j"
Closes gh-9557
1 parent 4c97dcb commit 01272fa

File tree

4 files changed

+39
-50
lines changed

4 files changed

+39
-50
lines changed

spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/HealthIndicatorAutoConfiguration.java

Lines changed: 23 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -105,8 +105,8 @@
105105
JestAutoConfiguration.class, JmsAutoConfiguration.class,
106106
LdapDataAutoConfiguration.class, MailSenderAutoConfiguration.class,
107107
MongoAutoConfiguration.class, MongoDataAutoConfiguration.class,
108-
RabbitAutoConfiguration.class, RedisAutoConfiguration.class,
109-
SolrAutoConfiguration.class, Neo4jDataAutoConfiguration.class })
108+
Neo4jDataAutoConfiguration.class, RabbitAutoConfiguration.class,
109+
RedisAutoConfiguration.class, SolrAutoConfiguration.class })
110110
@EnableConfigurationProperties({ HealthIndicatorProperties.class })
111111
@Import({
112112
ElasticsearchHealthIndicatorConfiguration.ElasticsearchClientHealthIndicatorConfiguration.class,
@@ -261,6 +261,27 @@ public HealthIndicator ldapHealthIndicator() {
261261

262262
}
263263

264+
@Configuration
265+
@ConditionalOnBean(MongoTemplate.class)
266+
@ConditionalOnEnabledHealthIndicator("mongo")
267+
public static class MongoHealthIndicatorConfiguration extends
268+
CompositeHealthIndicatorConfiguration<MongoHealthIndicator, MongoTemplate> {
269+
270+
private final Map<String, MongoTemplate> mongoTemplates;
271+
272+
public MongoHealthIndicatorConfiguration(
273+
Map<String, MongoTemplate> mongoTemplates) {
274+
this.mongoTemplates = mongoTemplates;
275+
}
276+
277+
@Bean
278+
@ConditionalOnMissingBean(name = "mongoHealthIndicator")
279+
public HealthIndicator mongoHealthIndicator() {
280+
return createHealthIndicator(this.mongoTemplates);
281+
}
282+
283+
}
284+
264285
@Configuration
265286
@ConditionalOnClass(SessionFactory.class)
266287
@ConditionalOnBean(SessionFactory.class)
@@ -283,27 +304,6 @@ public HealthIndicator neo4jHealthIndicator() {
283304

284305
}
285306

286-
@Configuration
287-
@ConditionalOnBean(MongoTemplate.class)
288-
@ConditionalOnEnabledHealthIndicator("mongo")
289-
public static class MongoHealthIndicatorConfiguration extends
290-
CompositeHealthIndicatorConfiguration<MongoHealthIndicator, MongoTemplate> {
291-
292-
private final Map<String, MongoTemplate> mongoTemplates;
293-
294-
public MongoHealthIndicatorConfiguration(
295-
Map<String, MongoTemplate> mongoTemplates) {
296-
this.mongoTemplates = mongoTemplates;
297-
}
298-
299-
@Bean
300-
@ConditionalOnMissingBean(name = "mongoHealthIndicator")
301-
public HealthIndicator mongoHealthIndicator() {
302-
return createHealthIndicator(this.mongoTemplates);
303-
}
304-
305-
}
306-
307307
@Configuration
308308
@ConditionalOnBean(RedisConnectionFactory.class)
309309
@ConditionalOnEnabledHealthIndicator("redis")

spring-boot-actuator/src/main/java/org/springframework/boot/actuate/health/Neo4jHealthIndicator.java

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -23,23 +23,21 @@
2323
import org.neo4j.ogm.session.Session;
2424
import org.neo4j.ogm.session.SessionFactory;
2525

26-
import org.springframework.boot.context.properties.ConfigurationProperties;
27-
2826
/**
2927
* {@link HealthIndicator} that tests the status of a Neo4j by executing a Cypher
3028
* statement.
3129
*
3230
* @author Eric Spiegelberg
31+
* @since 2.0.0
3332
*/
34-
@ConfigurationProperties(prefix = "management.health.neo4j", ignoreUnknownFields = false)
3533
public class Neo4jHealthIndicator extends AbstractHealthIndicator {
3634

37-
private final SessionFactory sessionFactory;
38-
3935
/**
4036
* The Cypher statement used to verify Neo4j is up.
4137
*/
42-
public static final String CYPHER = "match (n) return count(n) as nodes";
38+
static final String CYPHER = "match (n) return count(n) as nodes";
39+
40+
private final SessionFactory sessionFactory;
4341

4442
/**
4543
* Create a new {@link Neo4jHealthIndicator} using the specified
@@ -54,7 +52,7 @@ public Neo4jHealthIndicator(SessionFactory sessionFactory) {
5452
protected void doHealthCheck(Health.Builder builder) throws Exception {
5553
Session session = this.sessionFactory.openSession();
5654

57-
Result result = session.query(CYPHER, Collections.emptyMap());
55+
Result result = session.query(CYPHER, Collections.EMPTY_MAP);
5856
Iterable<Map<String, Object>> results = result.queryResults();
5957
int nodes = (int) results.iterator().next().get("nodes");
6058

spring-boot-actuator/src/test/java/org/springframework/boot/actuate/health/Neo4jHealthIndicatorTests.java

Lines changed: 10 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
package org.springframework.boot.actuate.health;
1818

1919
import java.util.ArrayList;
20+
import java.util.Collections;
2021
import java.util.HashMap;
2122
import java.util.List;
2223
import java.util.Map;
@@ -37,60 +38,49 @@
3738
* Tests for {@link Neo4jHealthIndicator}.
3839
*
3940
* @author Eric Spiegelberg
41+
* @author Stephane Nicoll
4042
*/
4143
public class Neo4jHealthIndicatorTests {
4244

43-
private Result result;
4445
private Session session;
45-
private SessionFactory sessionFactory;
4646

4747
private Neo4jHealthIndicator neo4jHealthIndicator;
4848

49-
private Map<String, Object> emptyParameters = new HashMap<>();
50-
5149
@Before
5250
public void before() {
53-
this.result = mock(Result.class);
5451
this.session = mock(Session.class);
55-
this.sessionFactory = mock(SessionFactory.class);
56-
57-
given(this.sessionFactory.openSession()).willReturn(this.session);
58-
59-
this.neo4jHealthIndicator = new Neo4jHealthIndicator(this.sessionFactory);
52+
SessionFactory sessionFactory = mock(SessionFactory.class);
53+
given(sessionFactory.openSession()).willReturn(this.session);
54+
this.neo4jHealthIndicator = new Neo4jHealthIndicator(sessionFactory);
6055
}
6156

6257
@Test
6358
public void neo4jUp() {
64-
given(this.session.query(Neo4jHealthIndicator.CYPHER, this.emptyParameters))
65-
.willReturn(this.result);
59+
Result result = mock(Result.class);
60+
given(this.session.query(Neo4jHealthIndicator.CYPHER, Collections.EMPTY_MAP))
61+
.willReturn(result);
6662

6763
int nodeCount = 500;
6864
Map<String, Object> expectedCypherDetails = new HashMap<>();
6965
expectedCypherDetails.put("nodes", nodeCount);
70-
7166
List<Map<String, Object>> queryResults = new ArrayList<>();
7267
queryResults.add(expectedCypherDetails);
73-
74-
given(this.result.queryResults()).willReturn(queryResults);
68+
given(result.queryResults()).willReturn(queryResults);
7569

7670
Health health = this.neo4jHealthIndicator.health();
7771
assertThat(health.getStatus()).isEqualTo(Status.UP);
78-
7972
Map<String, Object> details = health.getDetails();
8073
int nodeCountFromDetails = (int) details.get("nodes");
8174

8275
Assert.assertEquals(nodeCount, nodeCountFromDetails);
83-
8476
}
8577

8678
@Test
8779
public void neo4jDown() {
88-
8980
CypherException cypherException = new CypherException("Error executing Cypher",
9081
"Neo.ClientError.Statement.SyntaxError",
9182
"Unable to execute invalid Cypher");
92-
93-
given(this.session.query(Neo4jHealthIndicator.CYPHER, this.emptyParameters))
83+
given(this.session.query(Neo4jHealthIndicator.CYPHER, Collections.EMPTY_MAP))
9484
.willThrow(cypherException);
9585

9686
Health health = this.neo4jHealthIndicator.health();

spring-boot-docs/src/main/asciidoc/appendix-application-properties.adoc

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1214,6 +1214,7 @@ content into your application; rather pick only the properties that you need.
12141214
management.health.ldap.enabled=true # Enable LDAP health check.
12151215
management.health.mail.enabled=true # Enable Mail health check.
12161216
management.health.mongo.enabled=true # Enable MongoDB health check.
1217+
management.health.neo4j.enabled=true # Enable Neo4j health check.
12171218
management.health.rabbit.enabled=true # Enable RabbitMQ health check.
12181219
management.health.redis.enabled=true # Enable Redis health check.
12191220
management.health.solr.enabled=true # Enable Solr health check.

0 commit comments

Comments
 (0)