Restore handling of certain spring.data.neo4j.* properties

This commit switches the deprecation level of several properties in the
spring.data.neo4j namespace from error and warning. The server URI and
basic authentication can be used in a deprecated fashion to configure
the new neo4j driver.

Closes gh-22653
pull/22918/head
Stephane Nicoll 4 years ago
parent 9a2d2effa5
commit 25e08d2dee

@ -22,6 +22,7 @@ import java.time.Duration;
import java.util.List;
import java.util.Locale;
import java.util.concurrent.TimeUnit;
import java.util.function.Supplier;
import java.util.stream.Collectors;
import org.neo4j.driver.AuthToken;
@ -42,6 +43,7 @@ import org.springframework.boot.context.properties.EnableConfigurationProperties
import org.springframework.boot.context.properties.source.InvalidConfigurationPropertyValueException;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.env.Environment;
import org.springframework.util.StringUtils;
/**
@ -56,19 +58,31 @@ import org.springframework.util.StringUtils;
@EnableConfigurationProperties(Neo4jProperties.class)
public class Neo4jAutoConfiguration {
private static final URI DEFAULT_SERVER_URI = URI.create("bolt://localhost:7687");
@Bean
@ConditionalOnMissingBean
public Driver neo4jDriver(Neo4jProperties properties,
public Driver neo4jDriver(Neo4jProperties properties, Environment environment,
ObjectProvider<ConfigBuilderCustomizer> configBuilderCustomizers) {
AuthToken authToken = mapAuthToken(properties.getAuthentication());
AuthToken authToken = mapAuthToken(properties.getAuthentication(), environment);
Config config = mapDriverConfig(properties,
configBuilderCustomizers.orderedStream().collect(Collectors.toList()));
return GraphDatabase.driver(properties.getUri(), authToken, config);
URI serverUri = determineServerUri(properties, environment);
return GraphDatabase.driver(serverUri, authToken, config);
}
URI determineServerUri(Neo4jProperties properties, Environment environment) {
return getOrFallback(properties.getUri(), () -> {
URI deprecatedProperty = environment.getProperty("spring.data.neo4j.uri", URI.class);
return (deprecatedProperty != null) ? deprecatedProperty : DEFAULT_SERVER_URI;
});
}
AuthToken mapAuthToken(Neo4jProperties.Authentication authentication) {
String username = authentication.getUsername();
String password = authentication.getPassword();
AuthToken mapAuthToken(Neo4jProperties.Authentication authentication, Environment environment) {
String username = getOrFallback(authentication.getUsername(),
() -> environment.getProperty("spring.data.neo4j.username", String.class));
String password = getOrFallback(authentication.getPassword(),
() -> environment.getProperty("spring.data.neo4j.password", String.class));
String kerberosTicket = authentication.getKerberosTicket();
String realm = authentication.getRealm();
@ -89,6 +103,13 @@ public class Neo4jAutoConfiguration {
return AuthTokens.none();
}
private <T> T getOrFallback(T value, Supplier<T> fallback) {
if (value != null) {
return value;
}
return fallback.get();
}
Config mapDriverConfig(Neo4jProperties properties, List<ConfigBuilderCustomizer> customizers) {
Config.ConfigBuilder builder = Config.builder();
configurePoolSettings(builder, properties.getPool());

@ -35,7 +35,7 @@ public class Neo4jProperties {
/**
* URI used by the driver.
*/
private URI uri = URI.create("bolt://localhost:7687");
private URI uri;
/**
* Timeout for borrowing connections from the pool.

@ -681,7 +681,7 @@
"description": "Login password of the server.",
"deprecation": {
"replacement": "spring.neo4j.authentication.password",
"level": "error"
"level": "warning"
}
},
{
@ -706,7 +706,7 @@
"description": "URI used by the driver. Auto-detected by default.",
"deprecation": {
"replacement": "spring.neo4j.uri",
"level": "error"
"level": "warning"
}
},
{
@ -724,7 +724,7 @@
"description": "Login user of the server.",
"deprecation": {
"replacement": "spring.neo4j.authentication.password",
"level": "error"
"level": "warning"
}
},
{
@ -1506,6 +1506,10 @@
"name": "spring.mvc.locale-resolver",
"defaultValue": "accept-header"
},
{
"name": "spring.neo4j.uri",
"defaultValue": "bolt://localhost:7687"
},
{
"name": "spring.quartz.jdbc.comment-prefix",
"defaultValue": [

@ -18,6 +18,7 @@ package org.springframework.boot.autoconfigure.neo4j;
import java.io.File;
import java.io.IOException;
import java.net.URI;
import java.time.Duration;
import java.util.Arrays;
@ -37,6 +38,8 @@ import org.springframework.boot.autoconfigure.neo4j.Neo4jProperties.Security.Tru
import org.springframework.boot.context.properties.source.InvalidConfigurationPropertyValueException;
import org.springframework.boot.test.context.FilteredClassLoader;
import org.springframework.boot.test.context.runner.ApplicationContextRunner;
import org.springframework.core.env.Environment;
import org.springframework.mock.env.MockEnvironment;
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.assertThatExceptionOfType;
@ -114,6 +117,40 @@ class Neo4jAutoConfigurationTests {
.hasFieldOrPropertyWithValue("maxRetryTimeMs", 2000L);
}
@Test
void determineServerUriShouldDefaultToLocalhost() {
assertThat(determineServerUri(new Neo4jProperties(), new MockEnvironment()))
.isEqualTo(URI.create("bolt://localhost:7687"));
}
@Test
void determineServerUriWithCustomUriShouldOverrideDefault() {
URI customUri = URI.create("bolt://localhost:4242");
Neo4jProperties properties = new Neo4jProperties();
properties.setUri(customUri);
assertThat(determineServerUri(properties, new MockEnvironment())).isEqualTo(customUri);
}
@Test
@Deprecated
void determineServerUriWithDeprecatedPropertyShouldOverrideDefault() {
URI customUri = URI.create("bolt://localhost:4242");
MockEnvironment environment = new MockEnvironment().withProperty("spring.data.neo4j.uri", customUri.toString());
assertThat(determineServerUri(new Neo4jProperties(), environment)).isEqualTo(customUri);
}
@Test
@Deprecated
void determineServerUriWithCustoUriShouldTakePrecedenceOverDeprecatedProperty() {
URI customUri = URI.create("bolt://localhost:4242");
URI anotherCustomURI = URI.create("bolt://localhost:2424");
Neo4jProperties properties = new Neo4jProperties();
properties.setUri(customUri);
MockEnvironment environment = new MockEnvironment().withProperty("spring.data.neo4j.uri",
anotherCustomURI.toString());
assertThat(determineServerUri(properties, environment)).isEqualTo(customUri);
}
@Test
void authenticationShouldDefaultToNone() {
assertThat(mapAuthToken(new Authentication())).isEqualTo(AuthTokens.none());
@ -136,6 +173,25 @@ class Neo4jAutoConfigurationTests {
assertThat(mapAuthToken(authentication)).isEqualTo(AuthTokens.basic("Farin", "Urlaub", "Test Realm"));
}
@Test
@Deprecated
void authenticationWithUsernameUsingDeprecatedPropertiesShouldEnableBasicAuth() {
MockEnvironment environment = new MockEnvironment().withProperty("spring.data.neo4j.username", "user")
.withProperty("spring.data.neo4j.password", "secret");
assertThat(mapAuthToken(new Authentication(), environment)).isEqualTo(AuthTokens.basic("user", "secret"));
}
@Test
@Deprecated
void authenticationWithUsernameShouldTakePrecedenceOverDeprecatedPropertiesAndEnableBasicAuth() {
MockEnvironment environment = new MockEnvironment().withProperty("spring.data.neo4j.username", "user")
.withProperty("spring.data.neo4j.password", "secret");
Authentication authentication = new Authentication();
authentication.setUsername("Farin");
authentication.setPassword("Urlaub");
assertThat(mapAuthToken(authentication, environment)).isEqualTo(AuthTokens.basic("Farin", "Urlaub"));
}
@Test
void authenticationWithKerberosTicketShouldEnableKerberos() {
Authentication authentication = new Authentication();
@ -262,8 +318,16 @@ class Neo4jAutoConfigurationTests {
.isInstanceOf(Neo4jSpringJclLogging.class);
}
private URI determineServerUri(Neo4jProperties properties, Environment environment) {
return new Neo4jAutoConfiguration().determineServerUri(properties, environment);
}
private AuthToken mapAuthToken(Authentication authentication, Environment environment) {
return new Neo4jAutoConfiguration().mapAuthToken(authentication, environment);
}
private AuthToken mapAuthToken(Authentication authentication) {
return new Neo4jAutoConfiguration().mapAuthToken(authentication);
return mapAuthToken(authentication, new MockEnvironment());
}
private Config mapDriverConfig(Neo4jProperties properties, ConfigBuilderCustomizer... customizers) {

@ -16,7 +16,6 @@
package org.springframework.boot.autoconfigure.neo4j;
import java.net.URI;
import java.time.Duration;
import org.junit.jupiter.api.Test;
@ -66,12 +65,6 @@ class Neo4jPropertiesTests {
assertDuration(properties.getMaxTransactionRetryTime(), RetrySettings.DEFAULT.maxRetryTimeMs());
}
@Test
void shouldAssumeDefaultValuesForUrl() {
Neo4jProperties driverProperties = new Neo4jProperties();
assertThat(driverProperties.getUri()).isEqualTo(URI.create("bolt://localhost:7687"));
}
private static void assertDuration(Duration duration, long expectedValueInMillis) {
if (expectedValueInMillis == org.neo4j.driver.internal.async.pool.PoolSettings.NOT_CONFIGURED) {
assertThat(duration).isNull();

Loading…
Cancel
Save