Skip to content

Commit 88828f5

Browse files
author
Phillip Webb
committed
Use MongoDbFactory to create GridFsTemplate
Update MongoDataAutoConfiguration to use the MongoDbFactory when creating GridFsTemplate. Fixes gh-1295
1 parent d854c09 commit 88828f5

File tree

1 file changed

+47
-5
lines changed

1 file changed

+47
-5
lines changed

spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/mongo/MongoDataAutoConfiguration.java

Lines changed: 47 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -26,12 +26,16 @@
2626
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
2727
import org.springframework.context.annotation.Bean;
2828
import org.springframework.context.annotation.Configuration;
29+
import org.springframework.dao.DataAccessException;
30+
import org.springframework.dao.support.PersistenceExceptionTranslator;
2931
import org.springframework.data.mongodb.MongoDbFactory;
3032
import org.springframework.data.mongodb.core.MongoTemplate;
3133
import org.springframework.data.mongodb.core.SimpleMongoDbFactory;
3234
import org.springframework.data.mongodb.gridfs.GridFsTemplate;
35+
import org.springframework.util.Assert;
3336
import org.springframework.util.StringUtils;
3437

38+
import com.mongodb.DB;
3539
import com.mongodb.Mongo;
3640

3741
/**
@@ -73,11 +77,49 @@ public MongoTemplate mongoTemplate(MongoDbFactory mongoDbFactory)
7377

7478
@Bean
7579
@ConditionalOnMissingBean
76-
public GridFsTemplate gridFsTemplate(Mongo mongo, MongoTemplate mongoTemplate) {
77-
String db = StringUtils.hasText(this.properties.getGridFsDatabase()) ? this.properties
78-
.getGridFsDatabase() : this.properties.getMongoClientDatabase();
79-
return new GridFsTemplate(new SimpleMongoDbFactory(mongo, db),
80-
mongoTemplate.getConverter());
80+
public GridFsTemplate gridFsTemplate(MongoDbFactory mongoDbFactory,
81+
MongoTemplate mongoTemplate) {
82+
return new GridFsTemplate(new GridFsMongoDbFactory(mongoDbFactory,
83+
this.properties), mongoTemplate.getConverter());
84+
}
85+
86+
/**
87+
* {@link MongoDbFactory} decorator to respect
88+
* {@link MongoProperties#getGridFsDatabase()} if set.
89+
*/
90+
private static class GridFsMongoDbFactory implements MongoDbFactory {
91+
92+
private final MongoDbFactory mongoDbFactory;
93+
94+
private final MongoProperties properties;
95+
96+
public GridFsMongoDbFactory(MongoDbFactory mongoDbFactory,
97+
MongoProperties properties) {
98+
Assert.notNull(mongoDbFactory, "MongoDbFactory must not be null");
99+
Assert.notNull(properties, "Properties must not be null");
100+
this.mongoDbFactory = mongoDbFactory;
101+
this.properties = properties;
102+
}
103+
104+
@Override
105+
public DB getDb() throws DataAccessException {
106+
String gridFsDatabase = this.properties.getGridFsDatabase();
107+
if (StringUtils.hasText(gridFsDatabase)) {
108+
return this.mongoDbFactory.getDb(gridFsDatabase);
109+
}
110+
return this.mongoDbFactory.getDb();
111+
}
112+
113+
@Override
114+
public DB getDb(String dbName) throws DataAccessException {
115+
return this.mongoDbFactory.getDb(dbName);
116+
}
117+
118+
@Override
119+
public PersistenceExceptionTranslator getExceptionTranslator() {
120+
return this.mongoDbFactory.getExceptionTranslator();
121+
}
122+
81123
}
82124

83125
}

0 commit comments

Comments
 (0)