Skip to content

Commit 5fe5dc4

Browse files
committed
Merge pull request #24254 from pdambrauskas
* pr/24254: Polish "Upgrade to Embedded Mongo 3.0.0" Upgrade to Embedded Mongo 3.0.0 Closes gh-24254
2 parents bb78b6a + abbdbb0 commit 5fe5dc4

File tree

4 files changed

+49
-45
lines changed

4 files changed

+49
-45
lines changed

spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/mongo/embedded/DownloadConfigBuilderCustomizer.java

+9-8
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2012-2019 the original author or authors.
2+
* Copyright 2012-2020 the original author or authors.
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -16,13 +16,13 @@
1616

1717
package org.springframework.boot.autoconfigure.mongo.embedded;
1818

19-
import de.flapdoodle.embed.mongo.config.DownloadConfigBuilder;
20-
import de.flapdoodle.embed.process.config.store.IDownloadConfig;
19+
import de.flapdoodle.embed.process.config.store.DownloadConfig;
20+
import de.flapdoodle.embed.process.config.store.ImmutableDownloadConfig;
2121

2222
/**
2323
* Callback interface that can be implemented by beans wishing to customize the
24-
* {@link IDownloadConfig} via a {@link DownloadConfigBuilder} whilst retaining default
25-
* auto-configuration.
24+
* {@link DownloadConfig} via a {@link ImmutableDownloadConfig.Builder} whilst retaining
25+
* default auto-configuration.
2626
*
2727
* @author Michael Gmeiner
2828
* @since 2.2.0
@@ -31,9 +31,10 @@
3131
public interface DownloadConfigBuilderCustomizer {
3232

3333
/**
34-
* Customize the {@link DownloadConfigBuilder}.
35-
* @param downloadConfigBuilder the {@link DownloadConfigBuilder} to customize
34+
* Customize the {@link ImmutableDownloadConfig.Builder}.
35+
* @param downloadConfigBuilder the {@link ImmutableDownloadConfig.Builder} to
36+
* customize
3637
*/
37-
void customize(DownloadConfigBuilder downloadConfigBuilder);
38+
void customize(ImmutableDownloadConfig.Builder downloadConfigBuilder);
3839

3940
}

spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/mongo/embedded/EmbeddedMongoAutoConfiguration.java

+29-26
Original file line numberDiff line numberDiff line change
@@ -27,26 +27,25 @@
2727
import de.flapdoodle.embed.mongo.Command;
2828
import de.flapdoodle.embed.mongo.MongodExecutable;
2929
import de.flapdoodle.embed.mongo.MongodStarter;
30-
import de.flapdoodle.embed.mongo.config.DownloadConfigBuilder;
31-
import de.flapdoodle.embed.mongo.config.ExtractedArtifactStoreBuilder;
32-
import de.flapdoodle.embed.mongo.config.IMongodConfig;
33-
import de.flapdoodle.embed.mongo.config.MongodConfigBuilder;
30+
import de.flapdoodle.embed.mongo.config.Defaults;
31+
import de.flapdoodle.embed.mongo.config.ImmutableMongodConfig;
32+
import de.flapdoodle.embed.mongo.config.MongodConfig;
3433
import de.flapdoodle.embed.mongo.config.Net;
35-
import de.flapdoodle.embed.mongo.config.RuntimeConfigBuilder;
3634
import de.flapdoodle.embed.mongo.config.Storage;
3735
import de.flapdoodle.embed.mongo.distribution.Feature;
3836
import de.flapdoodle.embed.mongo.distribution.IFeatureAwareVersion;
3937
import de.flapdoodle.embed.mongo.distribution.Version;
4038
import de.flapdoodle.embed.mongo.distribution.Versions;
41-
import de.flapdoodle.embed.process.config.IRuntimeConfig;
39+
import de.flapdoodle.embed.process.config.RuntimeConfig;
4240
import de.flapdoodle.embed.process.config.io.ProcessOutput;
43-
import de.flapdoodle.embed.process.config.store.IDownloadConfig;
44-
import de.flapdoodle.embed.process.distribution.GenericVersion;
41+
import de.flapdoodle.embed.process.config.store.DownloadConfig;
42+
import de.flapdoodle.embed.process.config.store.ImmutableDownloadConfig;
43+
import de.flapdoodle.embed.process.distribution.Version.GenericVersion;
4544
import de.flapdoodle.embed.process.io.Processors;
4645
import de.flapdoodle.embed.process.io.Slf4jLevel;
4746
import de.flapdoodle.embed.process.io.progress.Slf4jProgressListener;
4847
import de.flapdoodle.embed.process.runtime.Network;
49-
import de.flapdoodle.embed.process.store.ArtifactStoreBuilder;
48+
import de.flapdoodle.embed.process.store.ExtractedArtifactStore;
5049
import org.slf4j.Logger;
5150
import org.slf4j.LoggerFactory;
5251

@@ -81,6 +80,7 @@
8180
* @author Yogesh Lonkar
8281
* @author Mark Paluch
8382
* @author Issam El-atif
83+
* @author Paulius Dambrauskas
8484
* @since 1.3.0
8585
*/
8686
@Configuration(proxyBeanMethods = false)
@@ -97,14 +97,14 @@ public class EmbeddedMongoAutoConfiguration {
9797

9898
private final MongoProperties properties;
9999

100-
public EmbeddedMongoAutoConfiguration(MongoProperties properties, EmbeddedMongoProperties embeddedProperties) {
100+
public EmbeddedMongoAutoConfiguration(MongoProperties properties) {
101101
this.properties = properties;
102102
}
103103

104104
@Bean(initMethod = "start", destroyMethod = "stop")
105105
@ConditionalOnMissingBean
106-
public MongodExecutable embeddedMongoServer(IMongodConfig mongodConfig, IRuntimeConfig runtimeConfig,
107-
ApplicationContext context) throws IOException {
106+
public MongodExecutable embeddedMongoServer(MongodConfig mongodConfig, RuntimeConfig runtimeConfig,
107+
ApplicationContext context) {
108108
Integer configuredPort = this.properties.getPort();
109109
if (configuredPort == null || configuredPort == 0) {
110110
setEmbeddedPort(context, mongodConfig.net().getPort());
@@ -113,7 +113,7 @@ public MongodExecutable embeddedMongoServer(IMongodConfig mongodConfig, IRuntime
113113
return mongodStarter.prepare(mongodConfig);
114114
}
115115

116-
private MongodStarter getMongodStarter(IRuntimeConfig runtimeConfig) {
116+
private MongodStarter getMongodStarter(RuntimeConfig runtimeConfig) {
117117
if (runtimeConfig == null) {
118118
return MongodStarter.getDefaultInstance();
119119
}
@@ -122,8 +122,8 @@ private MongodStarter getMongodStarter(IRuntimeConfig runtimeConfig) {
122122

123123
@Bean
124124
@ConditionalOnMissingBean
125-
public IMongodConfig embeddedMongoConfiguration(EmbeddedMongoProperties embeddedProperties) throws IOException {
126-
MongodConfigBuilder builder = new MongodConfigBuilder().version(determineVersion(embeddedProperties));
125+
public MongodConfig embeddedMongoConfiguration(EmbeddedMongoProperties embeddedProperties) throws IOException {
126+
ImmutableMongodConfig.Builder builder = MongodConfig.builder().version(determineVersion(embeddedProperties));
127127
EmbeddedMongoProperties.Storage storage = embeddedProperties.getStorage();
128128
if (storage != null) {
129129
String databaseDir = storage.getDatabaseDir();
@@ -149,12 +149,16 @@ private IFeatureAwareVersion determineVersion(EmbeddedMongoProperties embeddedPr
149149
return version;
150150
}
151151
}
152-
return Versions.withFeatures(new GenericVersion(embeddedProperties.getVersion()));
152+
return Versions.withFeatures(createEmbeddedMongoVersion(embeddedProperties));
153153
}
154-
return Versions.withFeatures(new GenericVersion(embeddedProperties.getVersion()),
154+
return Versions.withFeatures(createEmbeddedMongoVersion(embeddedProperties),
155155
embeddedProperties.getFeatures().toArray(new Feature[0]));
156156
}
157157

158+
private GenericVersion createEmbeddedMongoVersion(EmbeddedMongoProperties embeddedProperties) {
159+
return de.flapdoodle.embed.process.distribution.Version.of(embeddedProperties.getVersion());
160+
}
161+
158162
private InetAddress getHost() throws UnknownHostException {
159163
if (this.properties.getHost() == null) {
160164
return InetAddress.getByAddress(Network.localhostIsIPv6() ? IP6_LOOPBACK_ADDRESS : IP4_LOOPBACK_ADDRESS);
@@ -189,29 +193,28 @@ private Map<String, Object> getMongoPorts(MutablePropertySources sources) {
189193

190194
@Configuration(proxyBeanMethods = false)
191195
@ConditionalOnClass(Logger.class)
192-
@ConditionalOnMissingBean(IRuntimeConfig.class)
196+
@ConditionalOnMissingBean(RuntimeConfig.class)
193197
static class RuntimeConfigConfiguration {
194198

195199
@Bean
196-
IRuntimeConfig embeddedMongoRuntimeConfig(
200+
RuntimeConfig embeddedMongoRuntimeConfig(
197201
ObjectProvider<DownloadConfigBuilderCustomizer> downloadConfigBuilderCustomizers) {
198202
Logger logger = LoggerFactory.getLogger(getClass().getPackage().getName() + ".EmbeddedMongo");
199203
ProcessOutput processOutput = new ProcessOutput(Processors.logTo(logger, Slf4jLevel.INFO),
200204
Processors.logTo(logger, Slf4jLevel.ERROR),
201205
Processors.named("[console>]", Processors.logTo(logger, Slf4jLevel.DEBUG)));
202-
return new RuntimeConfigBuilder().defaultsWithLogger(Command.MongoD, logger).processOutput(processOutput)
206+
return Defaults.runtimeConfigFor(Command.MongoD, logger).processOutput(processOutput)
203207
.artifactStore(getArtifactStore(logger, downloadConfigBuilderCustomizers.orderedStream()))
204-
.daemonProcess(false).build();
208+
.isDaemonProcess(false).build();
205209
}
206210

207-
private ArtifactStoreBuilder getArtifactStore(Logger logger,
211+
private ExtractedArtifactStore getArtifactStore(Logger logger,
208212
Stream<DownloadConfigBuilderCustomizer> downloadConfigBuilderCustomizers) {
209-
DownloadConfigBuilder downloadConfigBuilder = new DownloadConfigBuilder()
210-
.defaultsForCommand(Command.MongoD);
213+
ImmutableDownloadConfig.Builder downloadConfigBuilder = Defaults.downloadConfigFor(Command.MongoD);
211214
downloadConfigBuilder.progressListener(new Slf4jProgressListener(logger));
212215
downloadConfigBuilderCustomizers.forEach((customizer) -> customizer.customize(downloadConfigBuilder));
213-
IDownloadConfig downloadConfig = downloadConfigBuilder.build();
214-
return new ExtractedArtifactStoreBuilder().defaults(Command.MongoD).download(downloadConfig);
216+
DownloadConfig downloadConfig = downloadConfigBuilder.build();
217+
return Defaults.extractedArtifactStoreFor(Command.MongoD).withDownloadConfig(downloadConfig);
215218
}
216219

217220
}

spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/mongo/embedded/EmbeddedMongoAutoConfigurationTests.java

+10-10
Original file line numberDiff line numberDiff line change
@@ -27,12 +27,12 @@
2727
import com.mongodb.client.MongoClients;
2828
import de.flapdoodle.embed.mongo.MongodExecutable;
2929
import de.flapdoodle.embed.mongo.MongodStarter;
30-
import de.flapdoodle.embed.mongo.config.IMongodConfig;
30+
import de.flapdoodle.embed.mongo.config.MongodConfig;
3131
import de.flapdoodle.embed.mongo.config.Storage;
3232
import de.flapdoodle.embed.mongo.distribution.Feature;
3333
import de.flapdoodle.embed.mongo.distribution.Version;
34-
import de.flapdoodle.embed.process.config.IRuntimeConfig;
35-
import de.flapdoodle.embed.process.config.store.IDownloadConfig;
34+
import de.flapdoodle.embed.process.config.RuntimeConfig;
35+
import de.flapdoodle.embed.process.config.store.DownloadConfig;
3636
import org.bson.Document;
3737
import org.junit.jupiter.api.AfterEach;
3838
import org.junit.jupiter.api.Test;
@@ -143,7 +143,7 @@ void portIsAvailableInParentContext() {
143143
@Test
144144
void defaultStorageConfiguration() {
145145
load(MongoClientConfiguration.class);
146-
Storage replication = this.context.getBean(IMongodConfig.class).replication();
146+
Storage replication = this.context.getBean(MongodConfig.class).replication();
147147
assertThat(replication.getOplogSize()).isEqualTo(0);
148148
assertThat(replication.getDatabaseDir()).isNull();
149149
assertThat(replication.getReplSetName()).isNull();
@@ -161,26 +161,26 @@ void mongoWritesToCustomDatabaseDir(@TempDir Path temp) throws IOException {
161161
@Test
162162
void customOpLogSizeIsAppliedToConfiguration() {
163163
load("spring.mongodb.embedded.storage.oplogSize=1024KB");
164-
assertThat(this.context.getBean(IMongodConfig.class).replication().getOplogSize()).isEqualTo(1);
164+
assertThat(this.context.getBean(MongodConfig.class).replication().getOplogSize()).isEqualTo(1);
165165
}
166166

167167
@Test
168168
void customOpLogSizeUsesMegabytesPerDefault() {
169169
load("spring.mongodb.embedded.storage.oplogSize=10");
170-
assertThat(this.context.getBean(IMongodConfig.class).replication().getOplogSize()).isEqualTo(10);
170+
assertThat(this.context.getBean(MongodConfig.class).replication().getOplogSize()).isEqualTo(10);
171171
}
172172

173173
@Test
174174
void customReplicaSetNameIsAppliedToConfiguration() {
175175
load("spring.mongodb.embedded.storage.replSetName=testing");
176-
assertThat(this.context.getBean(IMongodConfig.class).replication().getReplSetName()).isEqualTo("testing");
176+
assertThat(this.context.getBean(MongodConfig.class).replication().getReplSetName()).isEqualTo("testing");
177177
}
178178

179179
@Test
180180
void customizeDownloadConfiguration() {
181181
load(DownloadConfigBuilderCustomizerConfiguration.class);
182-
IRuntimeConfig runtimeConfig = this.context.getBean(IRuntimeConfig.class);
183-
IDownloadConfig downloadConfig = (IDownloadConfig) new DirectFieldAccessor(runtimeConfig.getArtifactStore())
182+
RuntimeConfig runtimeConfig = this.context.getBean(RuntimeConfig.class);
183+
DownloadConfig downloadConfig = (DownloadConfig) new DirectFieldAccessor(runtimeConfig.artifactStore())
184184
.getPropertyValue("downloadConfig");
185185
assertThat(downloadConfig.getUserAgent()).isEqualTo("Test User Agent");
186186
}
@@ -265,7 +265,7 @@ DownloadConfigBuilderCustomizer testDownloadConfigBuilderCustomizer() {
265265
static class CustomMongoConfiguration {
266266

267267
@Bean(initMethod = "start", destroyMethod = "stop")
268-
MongodExecutable customMongoServer(IRuntimeConfig runtimeConfig, IMongodConfig mongodConfig) {
268+
MongodExecutable customMongoServer(RuntimeConfig runtimeConfig, MongodConfig mongodConfig) {
269269
MongodStarter mongodStarter = MongodStarter.getInstance(runtimeConfig);
270270
return mongodStarter.prepare(mongodConfig);
271271
}

spring-boot-project/spring-boot-dependencies/build.gradle

+1-1
Original file line numberDiff line numberDiff line change
@@ -300,7 +300,7 @@ bom {
300300
]
301301
}
302302
}
303-
library("Embedded Mongo", "2.2.0") {
303+
library("Embedded Mongo", "3.0.0") {
304304
group("de.flapdoodle.embed") {
305305
modules = [
306306
"de.flapdoodle.embed.mongo"

0 commit comments

Comments
 (0)