Commit 297127e0 authored by Stephane Nicoll's avatar Stephane Nicoll

Polish "Add influxDB java client auto-configuration"

Closes gh-9066
parent 6a70b901
...@@ -641,6 +641,11 @@ ...@@ -641,6 +641,11 @@
<artifactId>aspectjweaver</artifactId> <artifactId>aspectjweaver</artifactId>
<optional>true</optional> <optional>true</optional>
</dependency> </dependency>
<dependency>
<groupId>org.influxdb</groupId>
<artifactId>influxdb-java</artifactId>
<optional>true</optional>
</dependency>
<dependency> <dependency>
<groupId>org.jooq</groupId> <groupId>org.jooq</groupId>
<artifactId>jooq</artifactId> <artifactId>jooq</artifactId>
...@@ -661,11 +666,6 @@ ...@@ -661,11 +666,6 @@
<artifactId>quartz</artifactId> <artifactId>quartz</artifactId>
<optional>true</optional> <optional>true</optional>
</dependency> </dependency>
<dependency>
<groupId>org.influxdb</groupId>
<artifactId>influxdb-java</artifactId>
<optional>true</optional>
</dependency>
<!-- Annotation processing --> <!-- Annotation processing -->
<dependency> <dependency>
<groupId>org.springframework.boot</groupId> <groupId>org.springframework.boot</groupId>
......
...@@ -23,6 +23,7 @@ import org.influxdb.InfluxDBFactory; ...@@ -23,6 +23,7 @@ import org.influxdb.InfluxDBFactory;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Configuration;
...@@ -31,32 +32,32 @@ import org.springframework.context.annotation.Configuration; ...@@ -31,32 +32,32 @@ import org.springframework.context.annotation.Configuration;
* {@link EnableAutoConfiguration Auto-configuration} for InfluxDB. * {@link EnableAutoConfiguration Auto-configuration} for InfluxDB.
* *
* @author Sergey Kuptsov * @author Sergey Kuptsov
* @author Stephane Nicoll
* @since 2.0.0
*/ */
@Configuration @Configuration
@ConditionalOnClass(InfluxDB.class) @ConditionalOnClass(InfluxDB.class)
@EnableConfigurationProperties(InfluxDBProperties.class) @EnableConfigurationProperties(InfluxDbProperties.class)
public class InfluxDBAutoConfiguration { public class InfluxDbAutoConfiguration {
private final InfluxDBProperties properties; private final InfluxDbProperties properties;
public InfluxDBAutoConfiguration(InfluxDBProperties properties) { public InfluxDbAutoConfiguration(InfluxDbProperties properties) {
this.properties = properties; this.properties = properties;
} }
@Bean @Bean
@ConditionalOnMissingBean @ConditionalOnMissingBean
public InfluxDB influxDB() { @ConditionalOnProperty("spring.influx.client.url")
if (Strings.isNullOrEmpty(this.properties.getUser())) { public InfluxDB influxDb() {
return InfluxDBFactory.connect( InfluxDbProperties.Client client = this.properties.getClient();
this.properties.getUrl() if (Strings.isNullOrEmpty(client.getUser())) {
); return InfluxDBFactory.connect(client.getUrl());
} }
else { else {
return InfluxDBFactory.connect( return InfluxDBFactory.connect(client.getUrl(), client.getUser(),
this.properties.getUrl(), client.getPassword());
this.properties.getUser(),
this.properties.getPassword()
);
} }
} }
} }
...@@ -22,46 +22,59 @@ import org.springframework.boot.context.properties.ConfigurationProperties; ...@@ -22,46 +22,59 @@ import org.springframework.boot.context.properties.ConfigurationProperties;
* Configuration properties for InfluxDB. * Configuration properties for InfluxDB.
* *
* @author Sergey Kuptsov * @author Sergey Kuptsov
* @author Stephane Nicoll
* @since 2.0.0
*/ */
@ConfigurationProperties(prefix = "spring.data.influx") @ConfigurationProperties(prefix = "spring.influx")
public class InfluxDBProperties { public class InfluxDbProperties {
/**
* The url to connect to.
*/
private String url;
/**
* 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 void setUrl(String url) { private final Client client = new Client();
this.url = url;
}
public String getUser() { public Client getClient() {
return this.user; return this.client;
} }
public void setUser(String user) { public static class Client {
this.user = user;
}
public String getPassword() { /**
return this.password; * 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 void setPassword(String password) {
this.password = password;
} }
} }
...@@ -62,6 +62,7 @@ org.springframework.boot.autoconfigure.hateoas.HypermediaAutoConfiguration,\ ...@@ -62,6 +62,7 @@ org.springframework.boot.autoconfigure.hateoas.HypermediaAutoConfiguration,\
org.springframework.boot.autoconfigure.hazelcast.HazelcastAutoConfiguration,\ org.springframework.boot.autoconfigure.hazelcast.HazelcastAutoConfiguration,\
org.springframework.boot.autoconfigure.hazelcast.HazelcastJpaDependencyAutoConfiguration,\ org.springframework.boot.autoconfigure.hazelcast.HazelcastJpaDependencyAutoConfiguration,\
org.springframework.boot.autoconfigure.http.HttpMessageConvertersAutoConfiguration,\ org.springframework.boot.autoconfigure.http.HttpMessageConvertersAutoConfiguration,\
org.springframework.boot.autoconfigure.influx.InfluxDbAutoConfiguration,\
org.springframework.boot.autoconfigure.info.ProjectInfoAutoConfiguration,\ org.springframework.boot.autoconfigure.info.ProjectInfoAutoConfiguration,\
org.springframework.boot.autoconfigure.integration.IntegrationAutoConfiguration,\ org.springframework.boot.autoconfigure.integration.IntegrationAutoConfiguration,\
org.springframework.boot.autoconfigure.jackson.JacksonAutoConfiguration,\ org.springframework.boot.autoconfigure.jackson.JacksonAutoConfiguration,\
...@@ -122,8 +123,7 @@ org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration,\ ...@@ -122,8 +123,7 @@ org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration,\
org.springframework.boot.autoconfigure.websocket.reactive.WebSocketReactiveAutoConfiguration,\ org.springframework.boot.autoconfigure.websocket.reactive.WebSocketReactiveAutoConfiguration,\
org.springframework.boot.autoconfigure.websocket.servlet.WebSocketServletAutoConfiguration,\ org.springframework.boot.autoconfigure.websocket.servlet.WebSocketServletAutoConfiguration,\
org.springframework.boot.autoconfigure.websocket.servlet.WebSocketMessagingAutoConfiguration,\ org.springframework.boot.autoconfigure.websocket.servlet.WebSocketMessagingAutoConfiguration,\
org.springframework.boot.autoconfigure.webservices.WebServicesAutoConfiguration,\ org.springframework.boot.autoconfigure.webservices.WebServicesAutoConfiguration
org.springframework.boot.autoconfigure.influx.InfluxDBAutoConfiguration
# Failure analyzers # Failure analyzers
org.springframework.boot.diagnostics.FailureAnalyzer=\ org.springframework.boot.diagnostics.FailureAnalyzer=\
......
...@@ -16,29 +16,25 @@ ...@@ -16,29 +16,25 @@
package org.springframework.boot.autoconfigure.influx; package org.springframework.boot.autoconfigure.influx;
import org.assertj.core.api.Java6Assertions;
import org.influxdb.InfluxDB; import org.influxdb.InfluxDB;
import org.junit.After; import org.junit.After;
import org.junit.Before;
import org.junit.Test; import org.junit.Test;
import org.springframework.boot.test.util.EnvironmentTestUtils; import org.springframework.boot.test.util.TestPropertyValues;
import org.springframework.context.annotation.AnnotationConfigApplicationContext; import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import static org.assertj.core.api.Assertions.assertThat;
/** /**
* Tests for {@link InfluxDBAutoConfiguration}. * Tests for {@link InfluxDbAutoConfiguration}.
* *
* @author Sergey Kuptsov * @author Sergey Kuptsov
* @author Stephane Nicoll
*/ */
public class InfluxDBAutoConfigurationTest { public class InfluxDbAutoConfigurationTest {
private AnnotationConfigApplicationContext context; private AnnotationConfigApplicationContext context;
@Before
public void setUp() {
this.context = new AnnotationConfigApplicationContext();
}
@After @After
public void tearDown() { public void tearDown() {
if (this.context != null) { if (this.context != null) {
...@@ -47,20 +43,31 @@ public class InfluxDBAutoConfigurationTest { ...@@ -47,20 +43,31 @@ public class InfluxDBAutoConfigurationTest {
} }
@Test @Test
public void canEnableConfiguration() { public void clientRequiresUrl() {
this.context.register(InfluxDBAutoConfiguration.class); load();
EnvironmentTestUtils.addEnvironment(this.context, "spring.data.influx.url=http://localhost"); assertThat(this.context.getBeansOfType(InfluxDB.class)).isEmpty();
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 @Test
public void canEnableWithEmptyUserConfiguration() { public void clientCanBeCustomized() {
this.context.register(InfluxDBAutoConfiguration.class); load("spring.influx.client.url=http://localhost",
EnvironmentTestUtils.addEnvironment(this.context, "spring.data.influx.url=http://localhost"); "spring.influx.client.password:password",
this.context.refresh(); "spring.influx.client.user:user");
Java6Assertions.assertThat(this.context.getBeansOfType(InfluxDB.class)).isNotEmpty(); 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;
}
} }
...@@ -93,6 +93,7 @@ ...@@ -93,6 +93,7 @@
<httpclient.version>4.5.3</httpclient.version> <httpclient.version>4.5.3</httpclient.version>
<httpcore.version>4.4.6</httpcore.version> <httpcore.version>4.4.6</httpcore.version>
<infinispan.version>8.2.6.Final</infinispan.version> <infinispan.version>8.2.6.Final</infinispan.version>
<influxdb-java.version>2.5</influxdb-java.version>
<jackson.version>2.9.0.pr3</jackson.version> <jackson.version>2.9.0.pr3</jackson.version>
<janino.version>3.0.7</janino.version> <janino.version>3.0.7</janino.version>
<javassist.version>3.21.0-GA</javassist.version> <!-- Same as Hibernate --> <javassist.version>3.21.0-GA</javassist.version> <!-- Same as Hibernate -->
...@@ -190,7 +191,6 @@ ...@@ -190,7 +191,6 @@
<webjars-locator.version>0.32-1</webjars-locator.version> <webjars-locator.version>0.32-1</webjars-locator.version>
<wsdl4j.version>1.6.3</wsdl4j.version> <wsdl4j.version>1.6.3</wsdl4j.version>
<xml-apis.version>1.4.01</xml-apis.version> <xml-apis.version>1.4.01</xml-apis.version>
<influxdb-java.version>2.5</influxdb-java.version>
<!-- Plugin versions --> <!-- Plugin versions -->
<build-helper-maven-plugin.version>1.10</build-helper-maven-plugin.version> <build-helper-maven-plugin.version>1.10</build-helper-maven-plugin.version>
<exec-maven-plugin.version>1.5.0</exec-maven-plugin.version> <exec-maven-plugin.version>1.5.0</exec-maven-plugin.version>
...@@ -1857,6 +1857,11 @@ ...@@ -1857,6 +1857,11 @@
</exclusion> </exclusion>
</exclusions> </exclusions>
</dependency> </dependency>
<dependency>
<groupId>org.influxdb</groupId>
<artifactId>influxdb-java</artifactId>
<version>${influxdb-java.version}</version>
</dependency>
<dependency> <dependency>
<groupId>org.javassist</groupId> <groupId>org.javassist</groupId>
<artifactId>javassist</artifactId> <artifactId>javassist</artifactId>
...@@ -2473,11 +2478,6 @@ ...@@ -2473,11 +2478,6 @@
<artifactId>xml-apis</artifactId> <artifactId>xml-apis</artifactId>
<version>${xml-apis.version}</version> <version>${xml-apis.version}</version>
</dependency> </dependency>
<dependency>
<groupId>org.influxdb</groupId>
<artifactId>influxdb-java</artifactId>
<version>${influxdb-java.version}</version>
</dependency>
</dependencies> </dependencies>
</dependencyManagement> </dependencyManagement>
<build> <build>
......
...@@ -714,6 +714,11 @@ content into your application; rather pick only the properties that you need. ...@@ -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.trace=false # Enable trace output.
spring.h2.console.settings.web-allow-others=false # Enable remote access. 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]) # JOOQ ({sc-spring-boot-autoconfigure}/jooq/JooqAutoConfiguration.{sc-ext}[JooqAutoConfiguration])
spring.jooq.sql-dialect= # Sql dialect to use, auto-detected by default. spring.jooq.sql-dialect= # Sql dialect to use, auto-detected by default.
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment