Merge GridFs with MongoTemplate configuration

This commit is contained in:
Dave Syer 2014-04-25 13:41:09 +01:00
parent f36f2024e2
commit 94dd510b52
3 changed files with 40 additions and 93 deletions

View File

@ -1,72 +0,0 @@
/*
* Copyright 2012-2013 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.springframework.boot.autoconfigure.mongo;
import com.mongodb.Mongo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.AutoConfigureAfter;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.mongodb.MongoDbFactory;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.SimpleMongoDbFactory;
import org.springframework.data.mongodb.gridfs.GridFsTemplate;
import org.springframework.util.StringUtils;
/**
* <P>
* {@link org.springframework.boot.autoconfigure.EnableAutoConfiguration Auto-configuration} for
* Mongo's {@link com.mongodb.gridfs.GridFS Grid FS} Spring Data's
* {@link org.springframework.data.mongodb.gridfs.GridFsTemplate GridFsTemplate}.
*
* <p>
* You can override which GridFS database is used by specifying {@code spring.data.mongodb.gridFsDatabase},
* otherwise it defaults to the general {@code spring.data.mongodb.database} parameter.
*
* @author Josh Long
*/
@Configuration
@ConditionalOnClass({Mongo.class, GridFsTemplate.class})
@EnableConfigurationProperties(MongoProperties.class)
@AutoConfigureAfter(MongoTemplateAutoConfiguration.class)
public class GridFsTemplateAutoConfiguration {
@Autowired
private MongoProperties mongoProperties;
@Bean
@ConditionalOnMissingBean
public MongoDbFactory mongoDbFactory(Mongo mongo) throws Exception {
String db = StringUtils.hasText(this.mongoProperties.getGridFsDatabase()) ?
this.mongoProperties.getGridFsDatabase() : this.mongoProperties.getMongoClientDatabase() ;
return new SimpleMongoDbFactory(mongo, db );
}
@Bean
@ConditionalOnMissingBean
public GridFsTemplate gridFsTemplate(MongoDbFactory mongoDbFactory,
MongoTemplate mongoTemplate) {
return new GridFsTemplate(mongoDbFactory, mongoTemplate.getConverter());
}
}

View File

@ -24,7 +24,11 @@ import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.mongodb.MongoDbFactory;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.SimpleMongoDbFactory;
import org.springframework.data.mongodb.gridfs.GridFsTemplate;
import org.springframework.util.StringUtils;
import com.mongodb.Mongo;
@ -51,8 +55,25 @@ public class MongoTemplateAutoConfiguration {
@Bean
@ConditionalOnMissingBean
public MongoTemplate mongoTemplate(Mongo mongo) throws UnknownHostException {
return new MongoTemplate(mongo, this.properties.getMongoClientDatabase());
public MongoTemplate mongoTemplate(MongoDbFactory mongoDbFactory)
throws UnknownHostException {
return new MongoTemplate(mongoDbFactory);
}
@Bean
@ConditionalOnMissingBean
public MongoDbFactory mongoDbFactory(Mongo mongo) throws Exception {
String db = StringUtils.hasText(this.properties.getGridFsDatabase()) ? this.properties
.getGridFsDatabase() : this.properties.getMongoClientDatabase();
return new SimpleMongoDbFactory(mongo, db);
}
@Bean
@ConditionalOnMissingBean
public GridFsTemplate gridFsTemplate(MongoDbFactory mongoDbFactory,
MongoTemplate mongoTemplate) {
return new GridFsTemplate(mongoDbFactory, mongoTemplate.getConverter());
}
}

View File

@ -13,41 +13,39 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.springframework.boot.autoconfigure.mongo;
package org.springframework.boot.autoconfigure.mongo;
import org.junit.After;
import org.junit.Test;
import org.springframework.boot.autoconfigure.PropertyPlaceholderAutoConfiguration;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.gridfs.GridFsTemplate;
import static org.junit.Assert.assertEquals;
/**
* Tests for {@link org.springframework.boot.autoconfigure.mongo.GridFsTemplateAutoConfiguration}.
* Tests for
* {@link org.springframework.boot.autoconfigure.mongo.MongoTemplateAutoConfiguration}.
*
* @author Josh Long
*/
public class GridFsTemplateAutoConfigurationTests {
private AnnotationConfigApplicationContext context;
private AnnotationConfigApplicationContext context;
@After
public void close() {
if (this.context != null) {
this.context.close();
}
}
@After
public void close() {
if (this.context != null) {
this.context.close();
}
}
@Test
public void templateExists() {
this.context = new AnnotationConfigApplicationContext(
PropertyPlaceholderAutoConfiguration.class, MongoAutoConfiguration.class,
MongoTemplateAutoConfiguration.class , GridFsTemplateAutoConfiguration.class);
assertEquals(1, this.context.getBeanNamesForType(GridFsTemplate.class).length);
}
@Test
public void templateExists() {
this.context = new AnnotationConfigApplicationContext(
PropertyPlaceholderAutoConfiguration.class, MongoAutoConfiguration.class,
MongoTemplateAutoConfiguration.class);
assertEquals(1, this.context.getBeanNamesForType(GridFsTemplate.class).length);
}
}