Upgrade to MongoDB 4.11.0
Closes gh-37874
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -1023,7 +1023,7 @@ bom {
|
||||
]
|
||||
}
|
||||
}
|
||||
library("MongoDB", "4.10.2") {
|
||||
library("MongoDB", "4.11.0") {
|
||||
group("org.mongodb") {
|
||||
modules = [
|
||||
"bson",
|
||||
|
||||
Reference in New Issue
Block a user