From 297127e07586b2289bb9eb07cc3bf1271706424c Mon Sep 17 00:00:00 2001 From: Stephane Nicoll Date: Fri, 2 Jun 2017 10:45:24 +0200 Subject: [PATCH] Polish "Add influxDB java client auto-configuration" Closes gh-9066 --- spring-boot-autoconfigure/pom.xml | 10 +-- ...on.java => InfluxDbAutoConfiguration.java} | 29 +++---- ...roperties.java => InfluxDbProperties.java} | 83 +++++++++++-------- .../main/resources/META-INF/spring.factories | 4 +- .../influx/InfluxDBAutoConfigurationTest.java | 66 --------------- .../influx/InfluxDbAutoConfigurationTest.java | 73 ++++++++++++++++ spring-boot-dependencies/pom.xml | 12 +-- .../appendix-application-properties.adoc | 5 ++ 8 files changed, 154 insertions(+), 128 deletions(-) rename spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/influx/{InfluxDBAutoConfiguration.java => InfluxDbAutoConfiguration.java} (68%) rename spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/influx/{InfluxDBProperties.java => InfluxDbProperties.java} (51%) delete mode 100644 spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/influx/InfluxDBAutoConfigurationTest.java create mode 100644 spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/influx/InfluxDbAutoConfigurationTest.java diff --git a/spring-boot-autoconfigure/pom.xml b/spring-boot-autoconfigure/pom.xml index ca4290415b..48c9cde59a 100755 --- a/spring-boot-autoconfigure/pom.xml +++ b/spring-boot-autoconfigure/pom.xml @@ -641,6 +641,11 @@ aspectjweaver true + + org.influxdb + influxdb-java + true + org.jooq jooq @@ -661,11 +666,6 @@ quartz true - - org.influxdb - influxdb-java - true - org.springframework.boot diff --git a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/influx/InfluxDBAutoConfiguration.java b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/influx/InfluxDbAutoConfiguration.java similarity index 68% rename from spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/influx/InfluxDBAutoConfiguration.java rename to spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/influx/InfluxDbAutoConfiguration.java index dbdb6dee8f..057684c849 100644 --- a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/influx/InfluxDBAutoConfiguration.java +++ b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/influx/InfluxDbAutoConfiguration.java @@ -23,6 +23,7 @@ import org.influxdb.InfluxDBFactory; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @@ -31,32 +32,32 @@ import org.springframework.context.annotation.Configuration; * {@link EnableAutoConfiguration Auto-configuration} for InfluxDB. * * @author Sergey Kuptsov + * @author Stephane Nicoll + * @since 2.0.0 */ @Configuration @ConditionalOnClass(InfluxDB.class) -@EnableConfigurationProperties(InfluxDBProperties.class) -public class InfluxDBAutoConfiguration { +@EnableConfigurationProperties(InfluxDbProperties.class) +public class InfluxDbAutoConfiguration { - private final InfluxDBProperties properties; + private final InfluxDbProperties properties; - public InfluxDBAutoConfiguration(InfluxDBProperties properties) { + public InfluxDbAutoConfiguration(InfluxDbProperties properties) { this.properties = properties; } @Bean @ConditionalOnMissingBean - public InfluxDB influxDB() { - if (Strings.isNullOrEmpty(this.properties.getUser())) { - return InfluxDBFactory.connect( - this.properties.getUrl() - ); + @ConditionalOnProperty("spring.influx.client.url") + public InfluxDB influxDb() { + InfluxDbProperties.Client client = this.properties.getClient(); + if (Strings.isNullOrEmpty(client.getUser())) { + return InfluxDBFactory.connect(client.getUrl()); } else { - return InfluxDBFactory.connect( - this.properties.getUrl(), - this.properties.getUser(), - this.properties.getPassword() - ); + return InfluxDBFactory.connect(client.getUrl(), client.getUser(), + client.getPassword()); } } + } diff --git a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/influx/InfluxDBProperties.java b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/influx/InfluxDbProperties.java similarity index 51% rename from spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/influx/InfluxDBProperties.java rename to spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/influx/InfluxDbProperties.java index 0a313b6b70..b3881fac87 100644 --- a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/influx/InfluxDBProperties.java +++ b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/influx/InfluxDbProperties.java @@ -22,46 +22,59 @@ import org.springframework.boot.context.properties.ConfigurationProperties; * Configuration properties for InfluxDB. * * @author Sergey Kuptsov + * @author Stephane Nicoll + * @since 2.0.0 */ -@ConfigurationProperties(prefix = "spring.data.influx") -public class InfluxDBProperties { +@ConfigurationProperties(prefix = "spring.influx") +public class InfluxDbProperties { - /** - * The url to connect to. - */ - private String url; + private final Client client = new Client(); - /** - * The username which is used to authorize against the influxDB instance. - */ - private String user; - - /** - * The password for the username which is used to authorize against the influxDB. - */ - private String password; - - public String getUrl() { - return this.url; + public Client getClient() { + return this.client; } - public void setUrl(String url) { - this.url = url; + public static class Client { + + /** + * Url of the InfluxDB instance to connect to. + */ + private String url; + + /** + * Login user. + */ + private String user; + + /** + * Login password. + */ + private String password; + + public String getUrl() { + return this.url; + } + + public void setUrl(String url) { + this.url = url; + } + + public String getUser() { + return this.user; + } + + public void setUser(String user) { + this.user = user; + } + + public String getPassword() { + return this.password; + } + + public void setPassword(String password) { + this.password = password; + } + } - public String getUser() { - return this.user; - } - - public void setUser(String user) { - this.user = user; - } - - public String getPassword() { - return this.password; - } - - public void setPassword(String password) { - this.password = password; - } } diff --git a/spring-boot-autoconfigure/src/main/resources/META-INF/spring.factories b/spring-boot-autoconfigure/src/main/resources/META-INF/spring.factories index b04618edfb..81a43a9aa2 100644 --- a/spring-boot-autoconfigure/src/main/resources/META-INF/spring.factories +++ b/spring-boot-autoconfigure/src/main/resources/META-INF/spring.factories @@ -62,6 +62,7 @@ org.springframework.boot.autoconfigure.hateoas.HypermediaAutoConfiguration,\ org.springframework.boot.autoconfigure.hazelcast.HazelcastAutoConfiguration,\ org.springframework.boot.autoconfigure.hazelcast.HazelcastJpaDependencyAutoConfiguration,\ org.springframework.boot.autoconfigure.http.HttpMessageConvertersAutoConfiguration,\ +org.springframework.boot.autoconfigure.influx.InfluxDbAutoConfiguration,\ org.springframework.boot.autoconfigure.info.ProjectInfoAutoConfiguration,\ org.springframework.boot.autoconfigure.integration.IntegrationAutoConfiguration,\ org.springframework.boot.autoconfigure.jackson.JacksonAutoConfiguration,\ @@ -122,8 +123,7 @@ org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration,\ org.springframework.boot.autoconfigure.websocket.reactive.WebSocketReactiveAutoConfiguration,\ org.springframework.boot.autoconfigure.websocket.servlet.WebSocketServletAutoConfiguration,\ org.springframework.boot.autoconfigure.websocket.servlet.WebSocketMessagingAutoConfiguration,\ -org.springframework.boot.autoconfigure.webservices.WebServicesAutoConfiguration,\ -org.springframework.boot.autoconfigure.influx.InfluxDBAutoConfiguration +org.springframework.boot.autoconfigure.webservices.WebServicesAutoConfiguration # Failure analyzers org.springframework.boot.diagnostics.FailureAnalyzer=\ diff --git a/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/influx/InfluxDBAutoConfigurationTest.java b/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/influx/InfluxDBAutoConfigurationTest.java deleted file mode 100644 index 67c07d5d6e..0000000000 --- a/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/influx/InfluxDBAutoConfigurationTest.java +++ /dev/null @@ -1,66 +0,0 @@ -/* - * 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.autoconfigure.influx; - -import org.assertj.core.api.Java6Assertions; -import org.influxdb.InfluxDB; -import org.junit.After; -import org.junit.Before; -import org.junit.Test; - -import org.springframework.boot.test.util.EnvironmentTestUtils; -import org.springframework.context.annotation.AnnotationConfigApplicationContext; - -/** - * Tests for {@link InfluxDBAutoConfiguration}. - * - * @author Sergey Kuptsov - */ -public class InfluxDBAutoConfigurationTest { - - private AnnotationConfigApplicationContext context; - - @Before - public void setUp() { - this.context = new AnnotationConfigApplicationContext(); - } - - @After - public void tearDown() { - if (this.context != null) { - this.context.close(); - } - } - - @Test - public void canEnableConfiguration() { - this.context.register(InfluxDBAutoConfiguration.class); - EnvironmentTestUtils.addEnvironment(this.context, "spring.data.influx.url=http://localhost"); - EnvironmentTestUtils.addEnvironment(this.context, "spring.data.influx.password:password"); - EnvironmentTestUtils.addEnvironment(this.context, "spring.data.influx.user:user"); - this.context.refresh(); - Java6Assertions.assertThat(this.context.getBeansOfType(InfluxDB.class)).isNotEmpty(); - } - - @Test - public void canEnableWithEmptyUserConfiguration() { - this.context.register(InfluxDBAutoConfiguration.class); - EnvironmentTestUtils.addEnvironment(this.context, "spring.data.influx.url=http://localhost"); - this.context.refresh(); - Java6Assertions.assertThat(this.context.getBeansOfType(InfluxDB.class)).isNotEmpty(); - } -} diff --git a/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/influx/InfluxDbAutoConfigurationTest.java b/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/influx/InfluxDbAutoConfigurationTest.java new file mode 100644 index 0000000000..59207aae8c --- /dev/null +++ b/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/influx/InfluxDbAutoConfigurationTest.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.autoconfigure.influx; + +import org.influxdb.InfluxDB; +import org.junit.After; +import org.junit.Test; + +import org.springframework.boot.test.util.TestPropertyValues; +import org.springframework.context.annotation.AnnotationConfigApplicationContext; + +import static org.assertj.core.api.Assertions.assertThat; + +/** + * Tests for {@link InfluxDbAutoConfiguration}. + * + * @author Sergey Kuptsov + * @author Stephane Nicoll + */ +public class InfluxDbAutoConfigurationTest { + + private AnnotationConfigApplicationContext context; + + @After + public void tearDown() { + if (this.context != null) { + this.context.close(); + } + } + + @Test + public void clientRequiresUrl() { + load(); + assertThat(this.context.getBeansOfType(InfluxDB.class)).isEmpty(); + } + + @Test + public void clientCanBeCustomized() { + load("spring.influx.client.url=http://localhost", + "spring.influx.client.password:password", + "spring.influx.client.user:user"); + assertThat(this.context.getBeansOfType(InfluxDB.class)).hasSize(1); + } + + @Test + public void clientCanBeCreatedWithoutCredentials() { + load("spring.influx.client.url=http://localhost"); + assertThat(this.context.getBeansOfType(InfluxDB.class)).hasSize(1); + } + + private void load(String... environment) { + AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(); + TestPropertyValues.of(environment).applyTo(ctx); + ctx.register(InfluxDbAutoConfiguration.class); + ctx.refresh(); + this.context = ctx; + } + +} diff --git a/spring-boot-dependencies/pom.xml b/spring-boot-dependencies/pom.xml index 9abb464ae0..38828932d6 100644 --- a/spring-boot-dependencies/pom.xml +++ b/spring-boot-dependencies/pom.xml @@ -93,6 +93,7 @@ 4.5.3 4.4.6 8.2.6.Final + 2.5 2.9.0.pr3 3.0.7 3.21.0-GA @@ -190,7 +191,6 @@ 0.32-1 1.6.3 1.4.01 - 2.5 1.10 1.5.0 @@ -1857,6 +1857,11 @@ + + org.influxdb + influxdb-java + ${influxdb-java.version} + org.javassist javassist @@ -2473,11 +2478,6 @@ xml-apis ${xml-apis.version} - - org.influxdb - influxdb-java - ${influxdb-java.version} - diff --git a/spring-boot-docs/src/main/asciidoc/appendix-application-properties.adoc b/spring-boot-docs/src/main/asciidoc/appendix-application-properties.adoc index 96bad8ed71..dbc41d5d17 100644 --- a/spring-boot-docs/src/main/asciidoc/appendix-application-properties.adoc +++ b/spring-boot-docs/src/main/asciidoc/appendix-application-properties.adoc @@ -714,6 +714,11 @@ content into your application; rather pick only the properties that you need. spring.h2.console.settings.trace=false # Enable trace output. spring.h2.console.settings.web-allow-others=false # Enable remote access. + # InfluxDB ({sc-spring-boot-autoconfigure}/influx/InfluxProperties.{sc-ext}[InfluxProperties]) + spring.influx.client.password= # Login password. + spring.influx.client.url= # Url of the InfluxDB instance to connect to. + spring.influx.client.user= # Login user. + # JOOQ ({sc-spring-boot-autoconfigure}/jooq/JooqAutoConfiguration.{sc-ext}[JooqAutoConfiguration]) spring.jooq.sql-dialect= # Sql dialect to use, auto-detected by default.