diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/pom.xml b/spring-boot-project/spring-boot-actuator-autoconfigure/pom.xml
index b54f924ec25..684b5f2307f 100644
--- a/spring-boot-project/spring-boot-actuator-autoconfigure/pom.xml
+++ b/spring-boot-project/spring-boot-actuator-autoconfigure/pom.xml
@@ -213,6 +213,11 @@
hibernate-validator
true
+
+ org.influxdb
+ influxdb-java
+ true
+
org.jolokia
jolokia-core
diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/influx/InfluxDbHealthIndicatorAutoConfiguration.java b/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/influx/InfluxDbHealthIndicatorAutoConfiguration.java
new file mode 100644
index 00000000000..445eec44912
--- /dev/null
+++ b/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/influx/InfluxDbHealthIndicatorAutoConfiguration.java
@@ -0,0 +1,64 @@
+/*
+ * Copyright 2012-2017 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.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.springframework.boot.actuate.autoconfigure.influx;
+
+import java.util.Map;
+
+import org.influxdb.InfluxDB;
+
+import org.springframework.boot.actuate.autoconfigure.health.CompositeHealthIndicatorConfiguration;
+import org.springframework.boot.actuate.autoconfigure.health.ConditionalOnEnabledHealthIndicator;
+import org.springframework.boot.actuate.autoconfigure.health.HealthIndicatorAutoConfiguration;
+import org.springframework.boot.actuate.health.HealthIndicator;
+import org.springframework.boot.actuate.infux.InfluxDbHealthIndicator;
+import org.springframework.boot.autoconfigure.AutoConfigureAfter;
+import org.springframework.boot.autoconfigure.AutoConfigureBefore;
+import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
+import org.springframework.boot.autoconfigure.influx.InfluxDbAutoConfiguration;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+/**
+ * {@link EnableAutoConfiguration Auto-configuration} for {@link InfluxDbHealthIndicator}.
+ *
+ * @author Eddú Meléndez
+ * @since 2.0.0
+ */
+@Configuration
+@ConditionalOnClass(InfluxDB.class)
+@ConditionalOnBean(InfluxDB.class)
+@ConditionalOnEnabledHealthIndicator("influxdb")
+@AutoConfigureBefore(HealthIndicatorAutoConfiguration.class)
+@AutoConfigureAfter(InfluxDbAutoConfiguration.class)
+public class InfluxDbHealthIndicatorAutoConfiguration extends
+ CompositeHealthIndicatorConfiguration {
+
+ private final Map influxDbs;
+
+ public InfluxDbHealthIndicatorAutoConfiguration(Map influxDbs) {
+ this.influxDbs = influxDbs;
+ }
+
+ @Bean
+ @ConditionalOnMissingBean(name = "influxdbHealthIndicator")
+ public HealthIndicator influxdbHealthIndicator() {
+ return createHealthIndicator(this.influxDbs);
+ }
+}
diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/resources/META-INF/spring.factories b/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/resources/META-INF/spring.factories
index 8b1df5fca67..dc0d4189a21 100644
--- a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/resources/META-INF/spring.factories
+++ b/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/resources/META-INF/spring.factories
@@ -19,6 +19,7 @@ org.springframework.boot.actuate.autoconfigure.env.EnvironmentEndpointAutoConfig
org.springframework.boot.actuate.autoconfigure.flyway.FlywayEndpointAutoConfiguration,\
org.springframework.boot.actuate.autoconfigure.health.HealthEndpointAutoConfiguration,\
org.springframework.boot.actuate.autoconfigure.health.HealthIndicatorAutoConfiguration,\
+org.springframework.boot.actuate.autoconfigure.influx.InfluxDbHealthIndicatorAutoConfiguration,\
org.springframework.boot.actuate.autoconfigure.info.InfoContributorAutoConfiguration,\
org.springframework.boot.actuate.autoconfigure.info.InfoEndpointAutoConfiguration,\
org.springframework.boot.actuate.autoconfigure.jdbc.DataSourceHealthIndicatorAutoConfiguration,\
diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/influx/InfluxDbHealthIndicatorAutoConfigurationTests.java b/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/influx/InfluxDbHealthIndicatorAutoConfigurationTests.java
new file mode 100644
index 00000000000..19c2884700e
--- /dev/null
+++ b/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/influx/InfluxDbHealthIndicatorAutoConfigurationTests.java
@@ -0,0 +1,73 @@
+/*
+ * Copyright 2012-2017 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.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.springframework.boot.actuate.autoconfigure.influx;
+
+import org.influxdb.InfluxDB;
+import org.junit.Test;
+
+import org.springframework.boot.actuate.autoconfigure.health.HealthIndicatorAutoConfiguration;
+import org.springframework.boot.actuate.health.ApplicationHealthIndicator;
+import org.springframework.boot.actuate.infux.InfluxDbHealthIndicator;
+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.mockito.Mockito.mock;
+
+/**
+ * Tests for {@link InfluxDbHealthIndicatorAutoConfiguration}.
+ *
+ * @author Eddú Meléndez
+ */
+public class InfluxDbHealthIndicatorAutonConfigurationTests {
+
+ private ApplicationContextRunner contextRunner = new ApplicationContextRunner()
+ .withConfiguration(AutoConfigurations.of(InfluxDbConfiguration.class,
+ InfluxDbHealthIndicatorAutoConfiguration.class,
+ HealthIndicatorAutoConfiguration.class));
+
+ @Test
+ public void runShouldCreateIndicator() throws Exception {
+ this.contextRunner.run((context) -> assertThat(context)
+ .hasSingleBean(InfluxDbHealthIndicator.class)
+ .doesNotHaveBean(ApplicationHealthIndicator.class));
+ }
+
+ @Test
+ public void runWhenDisabledShouldNotCreateIndicator() throws Exception {
+ this.contextRunner
+ .withPropertyValues("management.health.influxdb.enabled:false").run(
+ (context) -> assertThat(context)
+ .doesNotHaveBean(InfluxDbHealthIndicator.class)
+ .hasSingleBean(ApplicationHealthIndicator.class));
+ }
+
+ @Configuration
+ @AutoConfigureBefore(InfluxDbHealthIndicatorAutoConfiguration.class)
+ protected static class InfluxDbConfiguration {
+
+ @Bean
+ public InfluxDB influxdb() {
+ return mock(InfluxDB.class);
+ }
+
+ }
+
+}
diff --git a/spring-boot-project/spring-boot-actuator/pom.xml b/spring-boot-project/spring-boot-actuator/pom.xml
index 2d08eefbb8e..301f5ed1915 100644
--- a/spring-boot-project/spring-boot-actuator/pom.xml
+++ b/spring-boot-project/spring-boot-actuator/pom.xml
@@ -101,6 +101,11 @@
infinispan-spring4-embedded
true
+
+ org.influxdb
+ influxdb-java
+ true
+
org.liquibase
liquibase-core
diff --git a/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/infux/InfluxDbHealthIndicator.java b/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/infux/InfluxDbHealthIndicator.java
new file mode 100644
index 00000000000..3e58c4c4054
--- /dev/null
+++ b/spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/infux/InfluxDbHealthIndicator.java
@@ -0,0 +1,47 @@
+/*
+ * Copyright 2012-2017 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.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.springframework.boot.actuate.infux;
+
+import org.influxdb.InfluxDB;
+
+import org.springframework.boot.actuate.health.AbstractHealthIndicator;
+import org.springframework.boot.actuate.health.Health;
+import org.springframework.boot.actuate.health.HealthIndicator;
+import org.springframework.util.Assert;
+
+/**
+ * {@link HealthIndicator} for InfluxDb.
+ *
+ * @author Eddú Meléndez
+ * @since 2.0.0
+ */
+public class InfluxDbHealthIndicator extends AbstractHealthIndicator {
+
+ private final InfluxDB influxDb;
+
+ public InfluxDbHealthIndicator(InfluxDB influxDb) {
+ Assert.notNull(influxDb, "InfluxDB must not be null");
+ this.influxDb = influxDb;
+ }
+
+ @Override
+ protected void doHealthCheck(Health.Builder builder) throws Exception {
+ String version = this.influxDb.version();
+ builder.up().withDetail("version", version);
+ }
+
+}
diff --git a/spring-boot-project/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/influx/InfluxDbHealthIndicatorTests.java b/spring-boot-project/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/influx/InfluxDbHealthIndicatorTests.java
new file mode 100644
index 00000000000..156b8a7a30f
--- /dev/null
+++ b/spring-boot-project/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/influx/InfluxDbHealthIndicatorTests.java
@@ -0,0 +1,64 @@
+/*
+ * Copyright 2012-2017 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.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.springframework.boot.actuate.influx;
+
+import java.io.IOException;
+
+import org.influxdb.InfluxDB;
+import org.influxdb.InfluxDBException;
+import org.junit.Test;
+
+import org.springframework.boot.actuate.health.Health;
+import org.springframework.boot.actuate.health.Status;
+import org.springframework.boot.actuate.infux.InfluxDbHealthIndicator;
+
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.mockito.BDDMockito.given;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.verify;
+
+/**
+ * Tests for {@link InfluxDbHealthIndicator}
+ *
+ * @author Eddú Meléndez
+ */
+public class InfluxDbHealthIndicatorTests {
+
+ @Test
+ public void influxdbIsUp() {
+ InfluxDB influxDB = mock(InfluxDB.class);
+ given(influxDB.version()).willReturn("0.9");
+ InfluxDbHealthIndicator healthIndicator = new InfluxDbHealthIndicator(influxDB);
+ Health health = healthIndicator.health();
+ assertThat(health.getStatus()).isEqualTo(Status.UP);
+ assertThat(health.getDetails().get("version")).isEqualTo("0.9");
+ verify(influxDB).version();
+ }
+
+ @Test
+ public void influxdbIsDown() {
+ InfluxDB influxDB = mock(InfluxDB.class);
+ given(influxDB.version()).willThrow(
+ new InfluxDBException(new IOException("Connection failed")));
+ InfluxDbHealthIndicator healthIndicator = new InfluxDbHealthIndicator(influxDB);
+ Health health = healthIndicator.health();
+ assertThat(health.getStatus()).isEqualTo(Status.DOWN);
+ assertThat((String) health.getDetails().get("error"))
+ .contains("Connection failed");
+ verify(influxDB).version();
+ }
+}