Polish "Ensure that MongoClient's EventLoopGroup is shut down during context close"

See gh-16087
This commit is contained in:
Andy Wilkinson 2019-04-02 11:04:00 +01:00
parent ee7bed1849
commit f20d9a62ae
2 changed files with 12 additions and 12 deletions

View File

@ -1,5 +1,5 @@
/* /*
* Copyright 2012-2018 the original author or authors. * Copyright 2012-2019 the original author or authors.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@ -86,19 +86,19 @@ public class MongoReactiveAutoConfiguration {
@Bean @Bean
@Order(Ordered.HIGHEST_PRECEDENCE) @Order(Ordered.HIGHEST_PRECEDENCE)
public MongoClientSettingsBuilderCustomizer nettyDriverCustomizer( public NettyDriverMongoClientSettingsBuilderCustomizer nettyDriverCustomizer(
ObjectProvider<MongoClientSettings> settings) { ObjectProvider<MongoClientSettings> settings) {
return new EventLoopGroupMongoClientSettingsBuilderCustomizer(settings); return new NettyDriverMongoClientSettingsBuilderCustomizer(settings);
} }
private static final class EventLoopGroupMongoClientSettingsBuilderCustomizer private static final class NettyDriverMongoClientSettingsBuilderCustomizer
implements MongoClientSettingsBuilderCustomizer, DisposableBean { implements MongoClientSettingsBuilderCustomizer, DisposableBean {
private final ObjectProvider<MongoClientSettings> settings; private final ObjectProvider<MongoClientSettings> settings;
private EventLoopGroup eventLoopGroup; private volatile EventLoopGroup eventLoopGroup;
private EventLoopGroupMongoClientSettingsBuilderCustomizer( private NettyDriverMongoClientSettingsBuilderCustomizer(
ObjectProvider<MongoClientSettings> settings) { ObjectProvider<MongoClientSettings> settings) {
this.settings = settings; this.settings = settings;
} }

View File

@ -91,17 +91,17 @@ public class MongoReactiveAutoConfigurationTests {
@Test @Test
public void nettyStreamFactoryFactoryIsConfiguredAutomatically() { public void nettyStreamFactoryFactoryIsConfiguredAutomatically() {
AtomicReference<EventLoopGroup> capture = new AtomicReference<>(); AtomicReference<EventLoopGroup> eventLoopGroupReference = new AtomicReference<>();
this.contextRunner.run((context) -> { this.contextRunner.run((context) -> {
assertThat(context).hasSingleBean(MongoClient.class); assertThat(context).hasSingleBean(MongoClient.class);
StreamFactoryFactory factory = getSettings(context).getStreamFactoryFactory(); StreamFactoryFactory factory = getSettings(context).getStreamFactoryFactory();
assertThat(factory).isInstanceOf(NettyStreamFactoryFactory.class); assertThat(factory).isInstanceOf(NettyStreamFactoryFactory.class);
capture.set((EventLoopGroup) ReflectionTestUtils.getField(factory, EventLoopGroup eventLoopGroup = (EventLoopGroup) ReflectionTestUtils
"eventLoopGroup")); .getField(factory, "eventLoopGroup");
assertThat(capture.get()).isNotNull(); assertThat(eventLoopGroup.isShutdown()).isFalse();
assertThat(capture.get().isShutdown()).isFalse(); eventLoopGroupReference.set(eventLoopGroup);
}); });
assertThat(capture.get().isShutdown()).isTrue(); assertThat(eventLoopGroupReference.get().isShutdown()).isTrue();
} }
@Test @Test