Upgrade to MongoDB 4.11.0

Closes gh-37874
This commit is contained in:
Andy Wilkinson
2023-10-13 07:43:17 +01:00
parent fcf77ed65d
commit db50de3c1d
3 changed files with 30 additions and 35 deletions

View File

@@ -18,7 +18,7 @@ package org.springframework.boot.autoconfigure.mongo;
import com.mongodb.MongoClientSettings;
import com.mongodb.MongoClientSettings.Builder;
import com.mongodb.connection.netty.NettyStreamFactoryFactory;
import com.mongodb.connection.TransportSettings;
import com.mongodb.reactivestreams.client.MongoClient;
import io.netty.channel.EventLoopGroup;
import io.netty.channel.nio.NioEventLoopGroup;
@@ -113,11 +113,10 @@ public class MongoReactiveAutoConfiguration {
@Override
public void customize(Builder builder) {
if (!isStreamFactoryFactoryDefined(this.settings.getIfAvailable())) {
if (!isCustomTransportConfiguration(this.settings.getIfAvailable())) {
NioEventLoopGroup eventLoopGroup = new NioEventLoopGroup();
this.eventLoopGroup = eventLoopGroup;
builder
.streamFactoryFactory(NettyStreamFactoryFactory.builder().eventLoopGroup(eventLoopGroup).build());
builder.transportSettings(TransportSettings.nettyBuilder().eventLoopGroup(eventLoopGroup).build());
}
}
@@ -130,8 +129,10 @@ public class MongoReactiveAutoConfiguration {
}
}
private boolean isStreamFactoryFactoryDefined(MongoClientSettings settings) {
return settings != null && settings.getStreamFactoryFactory() != null;
@SuppressWarnings("deprecation")
private boolean isCustomTransportConfiguration(MongoClientSettings settings) {
return settings != null
&& (settings.getTransportSettings() != null || settings.getStreamFactoryFactory() != null);
}
}

View File

@@ -23,11 +23,9 @@ import com.mongodb.ConnectionString;
import com.mongodb.MongoClientSettings;
import com.mongodb.MongoCredential;
import com.mongodb.ReadPreference;
import com.mongodb.connection.AsynchronousSocketChannelStreamFactoryFactory;
import com.mongodb.connection.NettyTransportSettings;
import com.mongodb.connection.SslSettings;
import com.mongodb.connection.StreamFactory;
import com.mongodb.connection.StreamFactoryFactory;
import com.mongodb.connection.netty.NettyStreamFactoryFactory;
import com.mongodb.connection.TransportSettings;
import com.mongodb.reactivestreams.client.MongoClient;
import com.mongodb.reactivestreams.client.internal.MongoClientImpl;
import io.netty.channel.EventLoopGroup;
@@ -39,12 +37,8 @@ import org.springframework.boot.test.context.runner.ApplicationContextRunner;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.test.util.ReflectionTestUtils;
import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.BDDMockito.given;
import static org.mockito.Mockito.mock;
/**
* Tests for {@link MongoReactiveAutoConfiguration}.
@@ -85,7 +79,7 @@ class MongoReactiveAutoConfigurationTests {
assertThat(context).hasSingleBean(MongoClient.class);
MongoClientSettings settings = getSettings(context);
assertThat(settings.getApplicationName()).isEqualTo("test-config");
assertThat(settings.getStreamFactoryFactory()).isSameAs(context.getBean("myStreamFactoryFactory"));
assertThat(settings.getTransportSettings()).isSameAs(context.getBean("myTransportSettings"));
});
}
@@ -212,13 +206,13 @@ class MongoReactiveAutoConfigurationTests {
}
@Test
void nettyStreamFactoryFactoryIsConfiguredAutomatically() {
void nettyTransportSettingsAreConfiguredAutomatically() {
AtomicReference<EventLoopGroup> eventLoopGroupReference = new AtomicReference<>();
this.contextRunner.run((context) -> {
assertThat(context).hasSingleBean(MongoClient.class);
StreamFactoryFactory factory = getSettings(context).getStreamFactoryFactory();
assertThat(factory).isInstanceOf(NettyStreamFactoryFactory.class);
EventLoopGroup eventLoopGroup = (EventLoopGroup) ReflectionTestUtils.getField(factory, "eventLoopGroup");
TransportSettings transportSettings = getSettings(context).getTransportSettings();
assertThat(transportSettings).isInstanceOf(NettyTransportSettings.class);
EventLoopGroup eventLoopGroup = ((NettyTransportSettings) transportSettings).getEventLoopGroup();
assertThat(eventLoopGroup.isShutdown()).isFalse();
eventLoopGroupReference.set(eventLoopGroup);
});
@@ -226,14 +220,17 @@ class MongoReactiveAutoConfigurationTests {
}
@Test
void customizerOverridesAutoConfig() {
@SuppressWarnings("deprecation")
void customizerWithTransportSettingsOverridesAutoConfig() {
this.contextRunner.withPropertyValues("spring.data.mongodb.uri:mongodb://localhost/test?appname=auto-config")
.withUserConfiguration(SimpleCustomizerConfig.class)
.withUserConfiguration(SimpleTransportSettingsCustomizerConfig.class)
.run((context) -> {
assertThat(context).hasSingleBean(MongoClient.class);
MongoClientSettings settings = getSettings(context);
assertThat(settings.getApplicationName()).isEqualTo("overridden-name");
assertThat(settings.getStreamFactoryFactory()).isEqualTo(SimpleCustomizerConfig.streamFactoryFactory);
assertThat(settings.getApplicationName()).isEqualTo("custom-transport-settings");
assertThat(settings.getTransportSettings())
.isSameAs(SimpleTransportSettingsCustomizerConfig.transportSettings);
assertThat(settings.getStreamFactoryFactory()).isNull();
});
}
@@ -278,32 +275,29 @@ class MongoReactiveAutoConfigurationTests {
static class SslSettingsConfig {
@Bean
MongoClientSettings mongoClientSettings(StreamFactoryFactory streamFactoryFactory) {
MongoClientSettings mongoClientSettings(TransportSettings transportSettings) {
return MongoClientSettings.builder()
.applicationName("test-config")
.streamFactoryFactory(streamFactoryFactory)
.transportSettings(transportSettings)
.build();
}
@Bean
StreamFactoryFactory myStreamFactoryFactory() {
StreamFactoryFactory streamFactoryFactory = mock(StreamFactoryFactory.class);
given(streamFactoryFactory.create(any(), any())).willReturn(mock(StreamFactory.class));
return streamFactoryFactory;
TransportSettings myTransportSettings() {
return TransportSettings.nettyBuilder().build();
}
}
@Configuration(proxyBeanMethods = false)
static class SimpleCustomizerConfig {
static class SimpleTransportSettingsCustomizerConfig {
private static final StreamFactoryFactory streamFactoryFactory = new AsynchronousSocketChannelStreamFactoryFactory.Builder()
.build();
private static final TransportSettings transportSettings = TransportSettings.nettyBuilder().build();
@Bean
MongoClientSettingsBuilderCustomizer customizer() {
return (clientSettingsBuilder) -> clientSettingsBuilder.applicationName("overridden-name")
.streamFactoryFactory(streamFactoryFactory);
return (clientSettingsBuilder) -> clientSettingsBuilder.applicationName("custom-transport-settings")
.transportSettings(transportSettings);
}
}

View File

@@ -1023,7 +1023,7 @@ bom {
]
}
}
library("MongoDB", "4.10.2") {
library("MongoDB", "4.11.0") {
group("org.mongodb") {
modules = [
"bson",