Remove support for service connections to InfluxDB

Closes gh-35189
This commit is contained in:
Andy Wilkinson 2023-04-28 09:49:39 +01:00
parent 51a28af347
commit d7da77bda8
8 changed files with 4 additions and 335 deletions

View File

@ -16,8 +16,6 @@
package org.springframework.boot.autoconfigure.influx;
import java.net.URI;
import okhttp3.OkHttpClient;
import org.influxdb.InfluxDB;
import org.influxdb.impl.InfluxDBImpl;
@ -25,16 +23,11 @@ import org.influxdb.impl.InfluxDBImpl;
import org.springframework.beans.factory.ObjectProvider;
import org.springframework.boot.autoconfigure.AutoConfiguration;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.condition.AnyNestedCondition;
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.condition.ConditionalOnProperty;
import org.springframework.boot.autoconfigure.influx.InfluxDbAutoConfiguration.InfluxDBCondition;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Condition;
import org.springframework.context.annotation.Conditional;
/**
* {@link EnableAutoConfiguration Auto-configuration} for InfluxDB.
@ -49,23 +42,16 @@ import org.springframework.context.annotation.Conditional;
*/
@AutoConfiguration
@ConditionalOnClass(InfluxDB.class)
@Conditional(InfluxDBCondition.class)
@EnableConfigurationProperties(InfluxDbProperties.class)
@ConditionalOnProperty("spring.influx.url")
public class InfluxDbAutoConfiguration {
@Bean
@ConditionalOnMissingBean(InfluxDbConnectionDetails.class)
PropertiesInfluxDbConnectionDetails influxDbConnectionDetails(InfluxDbProperties properties) {
return new PropertiesInfluxDbConnectionDetails(properties);
}
@Bean
@ConditionalOnMissingBean
public InfluxDB influxDb(InfluxDbConnectionDetails connectionDetails,
ObjectProvider<InfluxDbOkHttpClientBuilderProvider> builder,
public InfluxDB influxDb(InfluxDbProperties properties, ObjectProvider<InfluxDbOkHttpClientBuilderProvider> builder,
ObjectProvider<InfluxDbCustomizer> customizers) {
InfluxDB influxDb = new InfluxDBImpl(connectionDetails.getUrl().toString(), connectionDetails.getUsername(),
connectionDetails.getPassword(), determineBuilder(builder.getIfAvailable()));
InfluxDB influxDb = new InfluxDBImpl(properties.getUrl().toString(), properties.getUser(),
properties.getPassword(), determineBuilder(builder.getIfAvailable()));
customizers.orderedStream().forEach((customizer) -> customizer.customize(influxDb));
return influxDb;
}
@ -77,54 +63,4 @@ public class InfluxDbAutoConfiguration {
return new OkHttpClient.Builder();
}
/**
* {@link Condition} that matches when either {@code spring.influx.url} has been set
* or there is an {@link InfluxDbConnectionDetails} bean.
*/
static final class InfluxDBCondition extends AnyNestedCondition {
InfluxDBCondition() {
super(ConfigurationPhase.REGISTER_BEAN);
}
@ConditionalOnProperty(prefix = "spring.influx", name = "url")
private static final class InfluxUrlCondition {
}
@ConditionalOnBean(InfluxDbConnectionDetails.class)
private static final class InfluxDbConnectionDetailsCondition {
}
}
/**
* Adapts {@link InfluxDbProperties} to {@link InfluxDbConnectionDetails}.
*/
static class PropertiesInfluxDbConnectionDetails implements InfluxDbConnectionDetails {
private final InfluxDbProperties properties;
PropertiesInfluxDbConnectionDetails(InfluxDbProperties properties) {
this.properties = properties;
}
@Override
public URI getUrl() {
return URI.create(this.properties.getUrl());
}
@Override
public String getUsername() {
return this.properties.getUser();
}
@Override
public String getPassword() {
return this.properties.getPassword();
}
}
}

View File

@ -1,51 +0,0 @@
/*
* Copyright 2012-2023 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
*
* https://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 java.net.URI;
import org.springframework.boot.autoconfigure.service.connection.ConnectionDetails;
/**
* Details required to establish a connection to an InfluxDB service.
*
* @author Moritz Halbritter
* @author Andy Wilkinson
* @author Phillip Webb
* @since 3.1.0
*/
public interface InfluxDbConnectionDetails extends ConnectionDetails {
/**
* URL of the InfluxDB instance to which to connect.
* @return the URL of the InfluxDB instance to which to connect
*/
URI getUrl();
/**
* Login user.
* @return the login user or {@code null}
*/
String getUsername();
/**
* Login password.
* @return the login password or {@code null}
*/
String getPassword();
}

View File

@ -16,7 +16,6 @@
package org.springframework.boot.autoconfigure.influx;
import java.net.URI;
import java.util.concurrent.TimeUnit;
import okhttp3.OkHttpClient;
@ -25,7 +24,6 @@ import org.junit.jupiter.api.Test;
import retrofit2.Retrofit;
import org.springframework.boot.autoconfigure.AutoConfigurations;
import org.springframework.boot.autoconfigure.influx.InfluxDbAutoConfiguration.PropertiesInfluxDbConnectionDetails;
import org.springframework.boot.test.context.assertj.AssertableApplicationContext;
import org.springframework.boot.test.context.runner.ApplicationContextRunner;
import org.springframework.context.annotation.Bean;
@ -54,35 +52,6 @@ class InfluxDbAutoConfigurationTests {
this.contextRunner.run((context) -> assertThat(context).doesNotHaveBean(InfluxDB.class));
}
@Test
void definesPropertiesBasedConnectionDetailsByDefault() {
this.contextRunner.withPropertyValues("spring.influx.url=http://localhost")
.run((context) -> assertThat(context).hasSingleBean(PropertiesInfluxDbConnectionDetails.class));
}
@Test
void shouldUseCustomConnectionDetailsWhenDefined() {
this.contextRunner.withBean(InfluxDbConnectionDetails.class, this::influxDbConnectionDetails).run((context) -> {
assertThat(context).hasSingleBean(InfluxDB.class)
.hasSingleBean(InfluxDbConnectionDetails.class)
.doesNotHaveBean(PropertiesInfluxDbConnectionDetails.class);
InfluxDB influxDb = context.getBean(InfluxDB.class);
assertThat(influxDb).hasFieldOrPropertyWithValue("hostName", "localhost");
});
}
@Test
void connectionDetailsOverwriteProperties() {
this.contextRunner.withBean(InfluxDbConnectionDetails.class, this::influxDbConnectionDetails)
.withPropertyValues("spring.influx.url=http://some-other-host", "spring.influx.user=user",
"spring.influx.password=password")
.run((context) -> {
assertThat(context).hasSingleBean(InfluxDB.class);
InfluxDB influxDb = context.getBean(InfluxDB.class);
assertThat(influxDb).hasFieldOrPropertyWithValue("hostName", "localhost");
});
}
@Test
void influxDbCanBeCustomized() {
this.contextRunner
@ -129,27 +98,6 @@ class InfluxDbAutoConfigurationTests {
return callFactory.readTimeoutMillis();
}
private InfluxDbConnectionDetails influxDbConnectionDetails() {
return new InfluxDbConnectionDetails() {
@Override
public URI getUrl() {
return URI.create("http://localhost");
}
@Override
public String getUsername() {
return "user-1";
}
@Override
public String getPassword() {
return "password-1";
}
};
}
@Configuration(proxyBeanMethods = false)
static class CustomOkHttpClientBuilderProviderConfig {

View File

@ -958,9 +958,6 @@ The following service connection factories are provided in the `spring-boot-test
| `FlywayConnectionDetails`
| Containers of type `JdbcDatabaseContainer`
| `InfluxDbConnectionDetails`
| Containers of type `InfluxDBContainer`
| `JdbcConnectionDetails`
| Containers of type `JdbcDatabaseContainer`

View File

@ -1,76 +0,0 @@
/*
* Copyright 2012-2023 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
*
* https://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.testcontainers.service.connection.influx;
import java.net.URI;
import org.testcontainers.containers.InfluxDBContainer;
import org.springframework.boot.autoconfigure.influx.InfluxDbConnectionDetails;
import org.springframework.boot.testcontainers.service.connection.ContainerConnectionDetailsFactory;
import org.springframework.boot.testcontainers.service.connection.ContainerConnectionSource;
import org.springframework.boot.testcontainers.service.connection.ServiceConnection;
/**
* {@link ContainerConnectionDetailsFactory} to create {@link InfluxDbConnectionDetails}
* from a {@link ServiceConnection @ServiceConnection}-annotated
* {@link InfluxDBContainer}.
*
* @author Moritz Halbritter
* @author Andy Wilkinson
* @author Phillip Webb
*/
class InfluxDbContainerConnectionDetailsFactory
extends ContainerConnectionDetailsFactory<InfluxDbConnectionDetails, InfluxDBContainer<?>> {
@Override
protected InfluxDbConnectionDetails getContainerConnectionDetails(
ContainerConnectionSource<InfluxDBContainer<?>> source) {
return new InfluxDbContainerConnectionDetails(source);
}
/**
* {@link InfluxDbConnectionDetails} backed by a {@link ContainerConnectionSource}.
*/
private static final class InfluxDbContainerConnectionDetails extends ContainerConnectionDetails
implements InfluxDbConnectionDetails {
private final InfluxDBContainer<?> container;
private InfluxDbContainerConnectionDetails(ContainerConnectionSource<InfluxDBContainer<?>> source) {
super(source);
this.container = source.getContainer();
}
@Override
public String getUsername() {
return this.container.getUsername();
}
@Override
public String getPassword() {
return this.container.getPassword();
}
@Override
public URI getUrl() {
return URI.create(this.container.getUrl());
}
}
}

View File

@ -1,20 +0,0 @@
/*
* Copyright 2012-2023 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
*
* https://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.
*/
/**
* Support for testcontainers InfluxDB service connections.
*/
package org.springframework.boot.testcontainers.service.connection.influx;

View File

@ -13,7 +13,6 @@ org.springframework.boot.testcontainers.service.connection.cassandra.CassandraCo
org.springframework.boot.testcontainers.service.connection.couchbase.CouchbaseContainerConnectionDetailsFactory,\
org.springframework.boot.testcontainers.service.connection.flyway.FlywayContainerConnectionDetailsFactory,\
org.springframework.boot.testcontainers.service.connection.elasticsearch.ElasticsearchContainerConnectionDetailsFactory,\
org.springframework.boot.testcontainers.service.connection.influx.InfluxDbContainerConnectionDetailsFactory,\
org.springframework.boot.testcontainers.service.connection.jdbc.JdbcContainerConnectionDetailsFactory,\
org.springframework.boot.testcontainers.service.connection.kafka.KafkaContainerConnectionDetailsFactory,\
org.springframework.boot.testcontainers.service.connection.liquibase.LiquibaseContainerConnectionDetailsFactory,\

View File

@ -1,64 +0,0 @@
/*
* Copyright 2012-2023 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
*
* https://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.testcontainers.service.connection.influx;
import org.influxdb.InfluxDB;
import org.junit.jupiter.api.Test;
import org.testcontainers.containers.InfluxDBContainer;
import org.testcontainers.junit.jupiter.Container;
import org.testcontainers.junit.jupiter.Testcontainers;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.ImportAutoConfiguration;
import org.springframework.boot.autoconfigure.influx.InfluxDbAutoConfiguration;
import org.springframework.boot.testcontainers.service.connection.ServiceConnection;
import org.springframework.boot.testsupport.testcontainers.DockerImageNames;
import org.springframework.context.annotation.Configuration;
import org.springframework.test.context.junit.jupiter.SpringJUnitConfig;
import static org.assertj.core.api.Assertions.assertThat;
/**
* Tests for {@link InfluxDbContainerConnectionDetailsFactory}.
*
* @author Moritz Halbritter
* @author Andy Wilkinson
* @author Phillip Webb
*/
@SpringJUnitConfig
@Testcontainers(disabledWithoutDocker = true)
class InfluxDbContainerConnectionDetailsFactoryIntegrationTests {
@Container
@ServiceConnection
static final InfluxDBContainer<?> influxDbService = new InfluxDBContainer<>(DockerImageNames.influxDb());
@Autowired
private InfluxDB influxDb;
@Test
void connectionCanBeMadeToInfluxDbContainer() {
assertThat(this.influxDb.version()).isEqualTo("v" + DockerImageNames.influxDb().getVersionPart());
}
@Configuration(proxyBeanMethods = false)
@ImportAutoConfiguration(InfluxDbAutoConfiguration.class)
static class TestConfiguration {
}
}