Skip to content

Commit aa3bed5

Browse files
committed
Remove GridFS from MongoConnectionDetails
GridFS is a concept specific to Spring Data MongoDB while MongoConnectionDetails provides general details for connecting to MongoDB, with or without Spring Data MongoDB. As such GridFS does not belong on MongoConnectionDetails and this commit removes it. Support for configuring GridFS through properties remains. Closes gh-47044
1 parent 42c494c commit aa3bed5

File tree

7 files changed

+31
-179
lines changed

7 files changed

+31
-179
lines changed

module/spring-boot-data-mongodb/src/main/java/org/springframework/boot/data/mongodb/autoconfigure/MongoDatabaseFactoryDependentConfiguration.java

Lines changed: 13 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,6 @@
2323

2424
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
2525
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
26-
import org.springframework.boot.mongodb.autoconfigure.MongoConnectionDetails;
27-
import org.springframework.boot.mongodb.autoconfigure.MongoConnectionDetails.GridFs;
2826
import org.springframework.boot.mongodb.autoconfigure.MongoProperties;
2927
import org.springframework.boot.mongodb.autoconfigure.MongoProperties.Gridfs;
3028
import org.springframework.context.annotation.Bean;
@@ -59,34 +57,32 @@ MongoTemplate mongoTemplate(MongoDatabaseFactory factory, MongoConverter convert
5957

6058
@Bean
6159
@ConditionalOnMissingBean(GridFsOperations.class)
62-
GridFsTemplate gridFsTemplate(MongoProperties properties, MongoDatabaseFactory factory, MongoTemplate mongoTemplate,
63-
MongoConnectionDetails connectionDetails) {
64-
return new GridFsTemplate(new GridFsMongoDatabaseFactory(factory, connectionDetails),
65-
mongoTemplate.getConverter(),
66-
(connectionDetails.getGridFs() != null) ? connectionDetails.getGridFs().getBucket() : null);
60+
GridFsTemplate gridFsTemplate(MongoProperties properties, MongoDatabaseFactory factory,
61+
MongoTemplate mongoTemplate) {
62+
return new GridFsTemplate(new GridFsMongoDatabaseFactory(factory, properties), mongoTemplate.getConverter(),
63+
properties.getGridfs().getBucket());
6764
}
6865

6966
/**
70-
* {@link MongoDatabaseFactory} decorator to respect {@link Gridfs#getDatabase()} or
71-
* {@link GridFs#getGridFs()} from the {@link MongoConnectionDetails} if set.
67+
* {@link MongoDatabaseFactory} decorator to respect {@link Gridfs#getDatabase()} if
68+
* set.
7269
*/
7370
static class GridFsMongoDatabaseFactory implements MongoDatabaseFactory {
7471

7572
private final MongoDatabaseFactory mongoDatabaseFactory;
7673

77-
private final MongoConnectionDetails connectionDetails;
74+
private final MongoProperties properties;
7875

79-
GridFsMongoDatabaseFactory(MongoDatabaseFactory mongoDatabaseFactory,
80-
MongoConnectionDetails connectionDetails) {
76+
GridFsMongoDatabaseFactory(MongoDatabaseFactory mongoDatabaseFactory, MongoProperties properties) {
8177
Assert.notNull(mongoDatabaseFactory, "'mongoDatabaseFactory' must not be null");
82-
Assert.notNull(connectionDetails, "'connectionDetails' must not be null");
78+
Assert.notNull(properties, "'properties' must not be null");
8379
this.mongoDatabaseFactory = mongoDatabaseFactory;
84-
this.connectionDetails = connectionDetails;
80+
this.properties = properties;
8581
}
8682

8783
@Override
8884
public MongoDatabase getMongoDatabase() throws DataAccessException {
89-
String gridFsDatabase = getGridFsDatabase(this.connectionDetails);
85+
String gridFsDatabase = getGridFsDatabase();
9086
if (StringUtils.hasText(gridFsDatabase)) {
9187
return this.mongoDatabaseFactory.getMongoDatabase(gridFsDatabase);
9288
}
@@ -113,8 +109,8 @@ public MongoDatabaseFactory withSession(ClientSession session) {
113109
return this.mongoDatabaseFactory.withSession(session);
114110
}
115111

116-
private @Nullable String getGridFsDatabase(MongoConnectionDetails connectionDetails) {
117-
return (connectionDetails.getGridFs() != null) ? connectionDetails.getGridFs().getDatabase() : null;
112+
private @Nullable String getGridFsDatabase() {
113+
return this.properties.getGridfs().getDatabase();
118114
}
119115

120116
}

module/spring-boot-data-mongodb/src/main/java/org/springframework/boot/data/mongodb/autoconfigure/MongoReactiveDataAutoConfiguration.java

Lines changed: 18 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -34,8 +34,8 @@
3434
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
3535
import org.springframework.boot.context.properties.EnableConfigurationProperties;
3636
import org.springframework.boot.mongodb.autoconfigure.MongoConnectionDetails;
37-
import org.springframework.boot.mongodb.autoconfigure.MongoConnectionDetails.GridFs;
3837
import org.springframework.boot.mongodb.autoconfigure.MongoProperties;
38+
import org.springframework.boot.mongodb.autoconfigure.MongoProperties.Gridfs;
3939
import org.springframework.boot.mongodb.autoconfigure.MongoReactiveAutoConfiguration;
4040
import org.springframework.context.annotation.Bean;
4141
import org.springframework.context.annotation.Import;
@@ -76,18 +76,19 @@
7676
@Import(MongoDataConfiguration.class)
7777
public final class MongoReactiveDataAutoConfiguration {
7878

79-
private final MongoConnectionDetails connectionDetails;
79+
private final MongoProperties properties;
8080

81-
MongoReactiveDataAutoConfiguration(MongoConnectionDetails connectionDetails) {
82-
this.connectionDetails = connectionDetails;
81+
MongoReactiveDataAutoConfiguration(MongoProperties properties) {
82+
this.properties = properties;
8383
}
8484

8585
@Bean
8686
@ConditionalOnMissingBean(ReactiveMongoDatabaseFactory.class)
87-
SimpleReactiveMongoDatabaseFactory reactiveMongoDatabaseFactory(MongoClient mongo, MongoProperties properties) {
88-
String database = properties.getDatabase();
87+
SimpleReactiveMongoDatabaseFactory reactiveMongoDatabaseFactory(MongoClient mongo,
88+
MongoConnectionDetails connectionDetails) {
89+
String database = this.properties.getDatabase();
8990
if (database == null) {
90-
database = this.connectionDetails.getConnectionString().getDatabase();
91+
database = connectionDetails.getConnectionString().getDatabase();
9192
}
9293
Assert.hasText(database, "Database name must not be empty");
9394
return new SimpleReactiveMongoDatabaseFactory(mongo, database);
@@ -111,25 +112,23 @@ DefaultDataBufferFactory dataBufferFactory() {
111112
ReactiveGridFsTemplate reactiveGridFsTemplate(ReactiveMongoDatabaseFactory reactiveMongoDatabaseFactory,
112113
MappingMongoConverter mappingMongoConverter, DataBufferFactory dataBufferFactory) {
113114
return new ReactiveGridFsTemplate(dataBufferFactory,
114-
new GridFsReactiveMongoDatabaseFactory(reactiveMongoDatabaseFactory, this.connectionDetails),
115-
mappingMongoConverter,
116-
(this.connectionDetails.getGridFs() != null) ? this.connectionDetails.getGridFs().getBucket() : null);
115+
new GridFsReactiveMongoDatabaseFactory(reactiveMongoDatabaseFactory, this.properties),
116+
mappingMongoConverter, this.properties.getGridfs().getBucket());
117117
}
118118

119119
/**
120-
* {@link ReactiveMongoDatabaseFactory} decorator to use {@link GridFs#getGridFs()}
121-
* from the {@link MongoConnectionDetails} when set.
120+
* {@link ReactiveMongoDatabaseFactory} decorator to use {@link Gridfs#getDatabase()}
121+
* from the {@link MongoProperties} when set.
122122
*/
123123
static class GridFsReactiveMongoDatabaseFactory implements ReactiveMongoDatabaseFactory {
124124

125125
private final ReactiveMongoDatabaseFactory delegate;
126126

127-
private final MongoConnectionDetails connectionDetails;
127+
private final MongoProperties properties;
128128

129-
GridFsReactiveMongoDatabaseFactory(ReactiveMongoDatabaseFactory delegate,
130-
MongoConnectionDetails connectionDetails) {
129+
GridFsReactiveMongoDatabaseFactory(ReactiveMongoDatabaseFactory delegate, MongoProperties properties) {
131130
this.delegate = delegate;
132-
this.connectionDetails = connectionDetails;
131+
this.properties = properties;
133132
}
134133

135134
@Override
@@ -139,15 +138,15 @@ public boolean hasCodecFor(Class<?> type) {
139138

140139
@Override
141140
public Mono<MongoDatabase> getMongoDatabase() throws DataAccessException {
142-
String gridFsDatabase = getGridFsDatabase(this.connectionDetails);
141+
String gridFsDatabase = getGridFsDatabase();
143142
if (StringUtils.hasText(gridFsDatabase)) {
144143
return this.delegate.getMongoDatabase(gridFsDatabase);
145144
}
146145
return this.delegate.getMongoDatabase();
147146
}
148147

149-
private @Nullable String getGridFsDatabase(MongoConnectionDetails connectionDetails) {
150-
return (connectionDetails.getGridFs() != null) ? connectionDetails.getGridFs().getDatabase() : null;
148+
private @Nullable String getGridFsDatabase() {
149+
return this.properties.getGridfs().getDatabase();
151150
}
152151

153152
@Override

module/spring-boot-data-mongodb/src/test/java/org/springframework/boot/data/mongodb/autoconfigure/MongoDataAutoConfigurationTests.java

Lines changed: 0 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -97,21 +97,6 @@ void whenGridFsDatabaseIsConfiguredThenGridFsTemplateIsAutoConfiguredAndUsesIt()
9797
});
9898
}
9999

100-
@Test
101-
@SuppressWarnings("unchecked")
102-
void usesMongoConnectionDetailsIfAvailable() {
103-
this.contextRunner.withUserConfiguration(ConnectionDetailsConfiguration.class).run((context) -> {
104-
assertThat(context).hasSingleBean(GridFsTemplate.class);
105-
GridFsTemplate template = context.getBean(GridFsTemplate.class);
106-
GridFSBucket bucket = ((Supplier<GridFSBucket>) ReflectionTestUtils.getField(template, "bucketSupplier"))
107-
.get();
108-
assertThat(bucket.getBucketName()).isEqualTo("connection-details-bucket");
109-
assertThat(bucket).extracting("filesCollection", InstanceOfAssertFactories.type(MongoCollection.class))
110-
.extracting((collection) -> collection.getNamespace().getDatabaseName())
111-
.isEqualTo("grid-database-1");
112-
});
113-
}
114-
115100
@Test
116101
@SuppressWarnings("unchecked")
117102
void whenGridFsBucketIsConfiguredThenGridFsTemplateIsAutoConfiguredAndUsesIt() {
@@ -370,28 +355,6 @@ MongoDatabaseFactory mongoDatabaseFactory() {
370355

371356
}
372357

373-
@Configuration(proxyBeanMethods = false)
374-
static class ConnectionDetailsConfiguration {
375-
376-
@Bean
377-
MongoConnectionDetails mongoConnectionDetails() {
378-
return new MongoConnectionDetails() {
379-
380-
@Override
381-
public ConnectionString getConnectionString() {
382-
return new ConnectionString("mongodb://localhost/db");
383-
}
384-
385-
@Override
386-
public GridFs getGridFs() {
387-
return GridFs.of("grid-database-1", "connection-details-bucket");
388-
}
389-
390-
};
391-
}
392-
393-
}
394-
395358
static class MyConverter implements Converter<MongoClient, Boolean> {
396359

397360
@Override

module/spring-boot-data-mongodb/src/test/java/org/springframework/boot/data/mongodb/autoconfigure/MongoReactiveDataAutoConfigurationTests.java

Lines changed: 0 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -18,20 +18,16 @@
1818

1919
import java.time.Duration;
2020

21-
import com.mongodb.ConnectionString;
2221
import com.mongodb.reactivestreams.client.MongoCollection;
2322
import com.mongodb.reactivestreams.client.gridfs.GridFSBucket;
2423
import org.junit.jupiter.api.Test;
2524
import reactor.core.publisher.Mono;
2625

2726
import org.springframework.boot.autoconfigure.AutoConfigurations;
2827
import org.springframework.boot.autoconfigure.context.PropertyPlaceholderAutoConfiguration;
29-
import org.springframework.boot.mongodb.autoconfigure.MongoConnectionDetails;
3028
import org.springframework.boot.mongodb.autoconfigure.MongoReactiveAutoConfiguration;
3129
import org.springframework.boot.test.context.assertj.AssertableApplicationContext;
3230
import org.springframework.boot.test.context.runner.ApplicationContextRunner;
33-
import org.springframework.context.annotation.Bean;
34-
import org.springframework.context.annotation.Configuration;
3531
import org.springframework.data.mongodb.ReactiveMongoDatabaseFactory;
3632
import org.springframework.data.mongodb.core.ReactiveMongoTemplate;
3733
import org.springframework.data.mongodb.core.SimpleReactiveMongoDatabaseFactory;
@@ -74,18 +70,6 @@ void whenGridFsDatabaseIsConfiguredThenGridFsTemplateUsesIt() {
7470
.run((context) -> assertThat(grisFsTemplateDatabaseName(context)).isEqualTo("grid"));
7571
}
7672

77-
@Test
78-
@SuppressWarnings("unchecked")
79-
void usesMongoConnectionDetailsIfAvailable() {
80-
this.contextRunner.withUserConfiguration(ConnectionDetailsConfiguration.class).run((context) -> {
81-
assertThat(grisFsTemplateDatabaseName(context)).isEqualTo("grid-database-1");
82-
ReactiveGridFsTemplate template = context.getBean(ReactiveGridFsTemplate.class);
83-
GridFSBucket bucket = ((Mono<GridFSBucket>) ReflectionTestUtils.getField(template, "bucketSupplier"))
84-
.block(Duration.ofSeconds(30));
85-
assertThat(bucket.getBucketName()).isEqualTo("connection-details-bucket");
86-
});
87-
}
88-
8973
@Test
9074
@SuppressWarnings("unchecked")
9175
void whenGridFsBucketIsConfiguredThenGridFsTemplateUsesIt() {
@@ -181,38 +165,4 @@ private String grisFsTemplateDatabaseName(AssertableApplicationContext context)
181165
return collection.getNamespace().getDatabaseName();
182166
}
183167

184-
@Configuration(proxyBeanMethods = false)
185-
static class ConnectionDetailsConfiguration {
186-
187-
@Bean
188-
MongoConnectionDetails mongoConnectionDetails() {
189-
return new MongoConnectionDetails() {
190-
191-
@Override
192-
public ConnectionString getConnectionString() {
193-
return new ConnectionString("mongodb://localhost/db");
194-
}
195-
196-
@Override
197-
public GridFs getGridFs() {
198-
return new GridFs() {
199-
200-
@Override
201-
public String getDatabase() {
202-
return "grid-database-1";
203-
}
204-
205-
@Override
206-
public String getBucket() {
207-
return "connection-details-bucket";
208-
}
209-
210-
};
211-
}
212-
213-
};
214-
}
215-
216-
}
217-
218168
}

module/spring-boot-mongodb/src/dockerTest/java/org/springframework/boot/mongodb/docker/compose/MongoDockerComposeConnectionDetailsFactoryIntegrationTests.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,6 @@ private void assertConnectionDetailsWithDatabase(MongoConnectionDetails connecti
5555
assertThat(connectionString.getCredential().getPassword()).isEqualTo("secret".toCharArray());
5656
assertThat(connectionString.getCredential().getSource()).isEqualTo("admin");
5757
assertThat(connectionString.getDatabase()).isEqualTo(database);
58-
assertThat(connectionDetails.getGridFs()).isNull();
5958
}
6059

6160
}

module/spring-boot-mongodb/src/main/java/org/springframework/boot/mongodb/autoconfigure/MongoConnectionDetails.java

Lines changed: 0 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -46,53 +46,4 @@ public interface MongoConnectionDetails extends ConnectionDetails {
4646
return null;
4747
}
4848

49-
/**
50-
* GridFS configuration.
51-
* @return the GridFS configuration or {@code null}
52-
*/
53-
default @Nullable GridFs getGridFs() {
54-
return null;
55-
}
56-
57-
/**
58-
* GridFS configuration.
59-
*/
60-
interface GridFs {
61-
62-
/**
63-
* GridFS database name.
64-
* @return the GridFS database name or {@code null}
65-
*/
66-
@Nullable String getDatabase();
67-
68-
/**
69-
* GridFS bucket name.
70-
* @return the GridFS bucket name or {@code null}
71-
*/
72-
@Nullable String getBucket();
73-
74-
/**
75-
* Factory method to create a new {@link GridFs} instance.
76-
* @param database the database
77-
* @param bucket the bucket name
78-
* @return a new {@link GridFs} instance
79-
*/
80-
static GridFs of(@Nullable String database, @Nullable String bucket) {
81-
return new GridFs() {
82-
83-
@Override
84-
public @Nullable String getDatabase() {
85-
return database;
86-
}
87-
88-
@Override
89-
public @Nullable String getBucket() {
90-
return bucket;
91-
}
92-
93-
};
94-
}
95-
96-
}
97-
9849
}

module/spring-boot-mongodb/src/main/java/org/springframework/boot/mongodb/autoconfigure/PropertiesMongoConnectionDetails.java

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -100,12 +100,6 @@ private char[] encode(char[] input) {
100100
return URLEncoder.encode(new String(input), StandardCharsets.UTF_8).toCharArray();
101101
}
102102

103-
@Override
104-
public GridFs getGridFs() {
105-
return GridFs.of(PropertiesMongoConnectionDetails.this.properties.getGridfs().getDatabase(),
106-
PropertiesMongoConnectionDetails.this.properties.getGridfs().getBucket());
107-
}
108-
109103
@Override
110104
public @Nullable SslBundle getSslBundle() {
111105
Ssl ssl = this.properties.getSsl();

0 commit comments

Comments
 (0)