Add configuration option for GridFsTemplate's bucket
Closes gh-22854
This commit is contained in:
@@ -23,6 +23,7 @@ import com.mongodb.client.MongoDatabase;
|
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
|
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
|
||||
import org.springframework.boot.autoconfigure.mongo.MongoProperties;
|
||||
import org.springframework.boot.autoconfigure.mongo.MongoProperties.Gridfs;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.dao.DataAccessException;
|
||||
@@ -76,12 +77,12 @@ class MongoDatabaseFactoryDependentConfiguration {
|
||||
@ConditionalOnMissingBean(GridFsOperations.class)
|
||||
GridFsTemplate gridFsTemplate(MongoDatabaseFactory factory, MongoTemplate mongoTemplate) {
|
||||
return new GridFsTemplate(new GridFsMongoDatabaseFactory(factory, this.properties),
|
||||
mongoTemplate.getConverter());
|
||||
mongoTemplate.getConverter(), this.properties.getGridfs().getBucket());
|
||||
}
|
||||
|
||||
/**
|
||||
* {@link MongoDatabaseFactory} decorator to respect
|
||||
* {@link MongoProperties#getGridFsDatabase()} if set.
|
||||
* {@link MongoDatabaseFactory} decorator to respect {@link Gridfs#getDatabase()} if
|
||||
* set.
|
||||
*/
|
||||
static class GridFsMongoDatabaseFactory implements MongoDatabaseFactory {
|
||||
|
||||
@@ -98,7 +99,7 @@ class MongoDatabaseFactoryDependentConfiguration {
|
||||
|
||||
@Override
|
||||
public MongoDatabase getMongoDatabase() throws DataAccessException {
|
||||
String gridFsDatabase = this.properties.getGridFsDatabase();
|
||||
String gridFsDatabase = this.properties.getGridfs().getDatabase();
|
||||
if (StringUtils.hasText(gridFsDatabase)) {
|
||||
return this.mongoDatabaseFactory.getMongoDatabase(gridFsDatabase);
|
||||
}
|
||||
|
||||
@@ -32,6 +32,7 @@ import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
|
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
|
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
|
||||
import org.springframework.boot.autoconfigure.mongo.MongoProperties;
|
||||
import org.springframework.boot.autoconfigure.mongo.MongoProperties.Gridfs;
|
||||
import org.springframework.boot.autoconfigure.mongo.MongoReactiveAutoConfiguration;
|
||||
import org.springframework.boot.context.properties.EnableConfigurationProperties;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
@@ -113,12 +114,12 @@ public class MongoReactiveDataAutoConfiguration {
|
||||
MongoProperties properties) {
|
||||
return new ReactiveGridFsTemplate(dataBufferFactory,
|
||||
new GridFsReactiveMongoDatabaseFactory(reactiveMongoDatabaseFactory, properties), mappingMongoConverter,
|
||||
null);
|
||||
properties.getGridfs().getBucket());
|
||||
}
|
||||
|
||||
/**
|
||||
* {@link ReactiveMongoDatabaseFactory} decorator to use
|
||||
* {@link MongoProperties#getGridFsDatabase()} when set.
|
||||
* {@link ReactiveMongoDatabaseFactory} decorator to use {@link Gridfs#getDatabase()}
|
||||
* when set.
|
||||
*/
|
||||
static class GridFsReactiveMongoDatabaseFactory implements ReactiveMongoDatabaseFactory {
|
||||
|
||||
@@ -138,7 +139,7 @@ public class MongoReactiveDataAutoConfiguration {
|
||||
|
||||
@Override
|
||||
public Mono<MongoDatabase> getMongoDatabase() throws DataAccessException {
|
||||
String gridFsDatabase = this.properties.getGridFsDatabase();
|
||||
String gridFsDatabase = this.properties.getGridfs().getDatabase();
|
||||
if (StringUtils.hasText(gridFsDatabase)) {
|
||||
return this.delegate.getMongoDatabase(gridFsDatabase);
|
||||
}
|
||||
|
||||
@@ -20,6 +20,7 @@ import com.mongodb.ConnectionString;
|
||||
import org.bson.UuidRepresentation;
|
||||
|
||||
import org.springframework.boot.context.properties.ConfigurationProperties;
|
||||
import org.springframework.boot.context.properties.DeprecatedConfigurationProperty;
|
||||
|
||||
/**
|
||||
* Configuration properties for Mongo.
|
||||
@@ -74,10 +75,7 @@ public class MongoProperties {
|
||||
*/
|
||||
private String authenticationDatabase;
|
||||
|
||||
/**
|
||||
* GridFS database name.
|
||||
*/
|
||||
private String gridFsDatabase;
|
||||
private final Gridfs gridfs = new Gridfs();
|
||||
|
||||
/**
|
||||
* Login user of the mongo server. Cannot be set with URI.
|
||||
@@ -193,12 +191,24 @@ public class MongoProperties {
|
||||
this.port = port;
|
||||
}
|
||||
|
||||
public String getGridFsDatabase() {
|
||||
return this.gridFsDatabase;
|
||||
public Gridfs getGridfs() {
|
||||
return this.gridfs;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the GridFS database name.
|
||||
* @return the GridFS database name
|
||||
* @deprecated since 2.4.0 in favor of {@link Gridfs#getDatabase()}
|
||||
*/
|
||||
@DeprecatedConfigurationProperty(replacement = "spring.data.mongodb.gridfs.database")
|
||||
@Deprecated
|
||||
public String getGridFsDatabase() {
|
||||
return this.gridfs.getDatabase();
|
||||
}
|
||||
|
||||
@Deprecated
|
||||
public void setGridFsDatabase(String gridFsDatabase) {
|
||||
this.gridFsDatabase = gridFsDatabase;
|
||||
this.gridfs.setDatabase(gridFsDatabase);
|
||||
}
|
||||
|
||||
public String getMongoClientDatabase() {
|
||||
@@ -216,4 +226,34 @@ public class MongoProperties {
|
||||
this.autoIndexCreation = autoIndexCreation;
|
||||
}
|
||||
|
||||
public static class Gridfs {
|
||||
|
||||
/**
|
||||
* GridFS database name.
|
||||
*/
|
||||
private String database;
|
||||
|
||||
/**
|
||||
* GridFS bucket name.
|
||||
*/
|
||||
private String bucket;
|
||||
|
||||
public String getDatabase() {
|
||||
return this.database;
|
||||
}
|
||||
|
||||
public void setDatabase(String database) {
|
||||
this.database = database;
|
||||
}
|
||||
|
||||
public String getBucket() {
|
||||
return this.bucket;
|
||||
}
|
||||
|
||||
public void setBucket(String bucket) {
|
||||
this.bucket = bucket;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -71,6 +71,17 @@ class MongoDataAutoConfigurationTests {
|
||||
|
||||
@Test
|
||||
void whenGridFsDatabaseIsConfiguredThenGridFsTemplateIsAutoConfiguredAndUsesIt() {
|
||||
this.contextRunner.withPropertyValues("spring.data.mongodb.gridfs.database:grid").run((context) -> {
|
||||
assertThat(context).hasSingleBean(GridFsTemplate.class);
|
||||
GridFsTemplate template = context.getBean(GridFsTemplate.class);
|
||||
MongoDatabaseFactory factory = (MongoDatabaseFactory) ReflectionTestUtils.getField(template, "dbFactory");
|
||||
assertThat(factory.getMongoDatabase().getName()).isEqualTo("grid");
|
||||
});
|
||||
}
|
||||
|
||||
@Test
|
||||
@Deprecated
|
||||
void whenGridFsDatabaseIsConfiguredWithDeprecatedPropertyThenGridFsTemplateIsAutoConfiguredAndUsesIt() {
|
||||
this.contextRunner.withPropertyValues("spring.data.mongodb.gridFsDatabase:grid").run((context) -> {
|
||||
assertThat(context).hasSingleBean(GridFsTemplate.class);
|
||||
GridFsTemplate template = context.getBean(GridFsTemplate.class);
|
||||
@@ -79,6 +90,15 @@ class MongoDataAutoConfigurationTests {
|
||||
});
|
||||
}
|
||||
|
||||
@Test
|
||||
void whenGridFsBucketIsConfiguredThenGridFsTemplateIsAutoConfiguredAndUsesIt() {
|
||||
this.contextRunner.withPropertyValues("spring.data.mongodb.gridfs.bucket:test-bucket").run((context) -> {
|
||||
assertThat(context).hasSingleBean(GridFsTemplate.class);
|
||||
GridFsTemplate template = context.getBean(GridFsTemplate.class);
|
||||
assertThat(template).hasFieldOrPropertyWithValue("bucket", "test-bucket");
|
||||
});
|
||||
}
|
||||
|
||||
@Test
|
||||
void customConversions() {
|
||||
this.contextRunner.withUserConfiguration(CustomConversionsConfig.class).run((context) -> {
|
||||
|
||||
@@ -54,10 +54,26 @@ class MongoReactiveDataAutoConfigurationTests {
|
||||
|
||||
@Test
|
||||
void whenGridFsDatabaseIsConfiguredThenGridFsTemplateUsesIt() {
|
||||
this.contextRunner.withPropertyValues("spring.data.mongodb.gridfs.database:grid")
|
||||
.run((context) -> assertThat(grisFsTemplateDatabaseName(context)).isEqualTo("grid"));
|
||||
}
|
||||
|
||||
@Test
|
||||
@Deprecated
|
||||
void whenGridFsDatabaseIsConfiguredWithDeprecatedPropertyThenGridFsTemplateUsesIt() {
|
||||
this.contextRunner.withPropertyValues("spring.data.mongodb.gridFsDatabase:grid")
|
||||
.run((context) -> assertThat(grisFsTemplateDatabaseName(context)).isEqualTo("grid"));
|
||||
}
|
||||
|
||||
@Test
|
||||
void whenGridFsBucketIsConfiguredThenGridFsTemplateUsesIt() {
|
||||
this.contextRunner.withPropertyValues("spring.data.mongodb.gridfs.bucket:test-bucket").run((context) -> {
|
||||
assertThat(context).hasSingleBean(ReactiveGridFsTemplate.class);
|
||||
ReactiveGridFsTemplate template = context.getBean(ReactiveGridFsTemplate.class);
|
||||
assertThat(template).hasFieldOrPropertyWithValue("bucket", "test-bucket");
|
||||
});
|
||||
}
|
||||
|
||||
@Test
|
||||
void backsOffIfMongoClientBeanIsNotPresent() {
|
||||
ApplicationContextRunner runner = new ApplicationContextRunner().withConfiguration(AutoConfigurations
|
||||
|
||||
Reference in New Issue
Block a user