Skip to content

Commit d37a234

Browse files
committed
EmbeddedMongoAutoConfiguration should depend on bean by type
1 parent 73704c8 commit d37a234

File tree

2 files changed

+43
-8
lines changed

2 files changed

+43
-8
lines changed

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

Lines changed: 21 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,8 @@
4848
import org.slf4j.Logger;
4949
import org.slf4j.LoggerFactory;
5050

51+
import org.springframework.beans.factory.BeanFactoryUtils;
52+
import org.springframework.beans.factory.ListableBeanFactory;
5153
import org.springframework.boot.autoconfigure.AutoConfigureBefore;
5254
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
5355
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
@@ -74,6 +76,7 @@
7476
* @author Andy Wilkinson
7577
* @author Yogesh Lonkar
7678
* @author Mark Paluch
79+
* @author Issam El-atif
7780
* @since 1.3.0
7881
*/
7982
@Configuration
@@ -230,11 +233,16 @@ private ArtifactStoreBuilder getArtifactStore(Logger logger) {
230233
*/
231234
@Configuration
232235
@ConditionalOnClass({ MongoClient.class, MongoClientFactoryBean.class })
233-
protected static class EmbeddedMongoDependencyConfiguration
234-
extends MongoClientDependsOnBeanFactoryPostProcessor {
236+
protected static class EmbeddedMongoDependencyConfiguration {
235237

236-
public EmbeddedMongoDependencyConfiguration() {
237-
super("embeddedMongoServer");
238+
@Bean
239+
public MongoClientDependsOnBeanFactoryPostProcessor mongoClientDependsOnBeanFactoryPostProcessor(
240+
ListableBeanFactory listableBeanFactory) {
241+
String[] mongoExecutableBeanNames = BeanFactoryUtils
242+
.beanNamesForTypeIncludingAncestors(listableBeanFactory,
243+
MongodExecutable.class);
244+
return new MongoClientDependsOnBeanFactoryPostProcessor(
245+
mongoExecutableBeanNames);
238246
}
239247

240248
}
@@ -246,11 +254,16 @@ public EmbeddedMongoDependencyConfiguration() {
246254
@Configuration
247255
@ConditionalOnClass({ com.mongodb.reactivestreams.client.MongoClient.class,
248256
ReactiveMongoClientFactoryBean.class })
249-
protected static class EmbeddedReactiveMongoDependencyConfiguration
250-
extends ReactiveStreamsMongoClientDependsOnBeanFactoryPostProcessor {
257+
protected static class EmbeddedReactiveMongoDependencyConfiguration {
251258

252-
public EmbeddedReactiveMongoDependencyConfiguration() {
253-
super("embeddedMongoServer");
259+
@Bean
260+
public ReactiveStreamsMongoClientDependsOnBeanFactoryPostProcessor reactiveStreamsMongoClientDependsOnBeanFactoryPostProcessor(
261+
ListableBeanFactory listableBeanFactory) {
262+
String[] mongoExecutableBeanNames = BeanFactoryUtils
263+
.beanNamesForTypeIncludingAncestors(listableBeanFactory,
264+
MongodExecutable.class);
265+
return new ReactiveStreamsMongoClientDependsOnBeanFactoryPostProcessor(
266+
mongoExecutableBeanNames);
254267
}
255268

256269
}

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

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,10 +22,12 @@
2222

2323
import com.mongodb.MongoClient;
2424
import de.flapdoodle.embed.mongo.MongodExecutable;
25+
import de.flapdoodle.embed.mongo.MongodStarter;
2526
import de.flapdoodle.embed.mongo.config.IMongodConfig;
2627
import de.flapdoodle.embed.mongo.config.Storage;
2728
import de.flapdoodle.embed.mongo.distribution.Feature;
2829
import de.flapdoodle.embed.mongo.distribution.Version;
30+
import de.flapdoodle.embed.process.config.IRuntimeConfig;
2931
import org.bson.Document;
3032
import org.junit.After;
3133
import org.junit.Test;
@@ -43,13 +45,15 @@
4345
import org.springframework.util.FileSystemUtils;
4446

4547
import static org.assertj.core.api.Assertions.assertThat;
48+
import static org.assertj.core.api.Assertions.assertThatCode;
4649

4750
/**
4851
* Tests for {@link EmbeddedMongoAutoConfiguration}.
4952
*
5053
* @author Henryk Konsek
5154
* @author Andy Wilkinson
5255
* @author Stephane Nicoll
56+
* @author Issam El-atif
5357
*/
5458
public class EmbeddedMongoAutoConfigurationTests {
5559

@@ -182,6 +186,12 @@ public void shutdownHookIsNotRegistered() {
182186
.isFalse();
183187
}
184188

189+
@Test
190+
public void customMongoServerConfiguration() {
191+
assertThatCode(() -> load(CustomMongoConfiguration.class))
192+
.doesNotThrowAnyException();
193+
}
194+
185195
private void assertVersionConfiguration(String configuredVersion,
186196
String expectedVersion) {
187197
this.context = new AnnotationConfigApplicationContext();
@@ -229,4 +239,16 @@ public MongoClient mongoClient(@Value("${local.mongo.port}") int port) {
229239

230240
}
231241

242+
@Configuration
243+
static class CustomMongoConfiguration {
244+
245+
@Bean(initMethod = "start", destroyMethod = "stop")
246+
public MongodExecutable customMongoServer(IRuntimeConfig runtimeConfig,
247+
IMongodConfig mongodConfig) {
248+
MongodStarter mongodStarter = MongodStarter.getInstance(runtimeConfig);
249+
return mongodStarter.prepare(mongodConfig);
250+
}
251+
252+
}
253+
232254
}

0 commit comments

Comments
 (0)