diff --git a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/mongo/GridFsTemplateAutoConfiguration.java b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/mongo/GridFsTemplateAutoConfiguration.java new file mode 100644 index 00000000000..2ca1e9bd947 --- /dev/null +++ b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/mongo/GridFsTemplateAutoConfiguration.java @@ -0,0 +1,56 @@ +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; + +/** + *
+ * {@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}. + * + *
+ * 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()); + } + + +} diff --git a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/mongo/MongoProperties.java b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/mongo/MongoProperties.java index be45ad716ed..e0b3edf7556 100644 --- a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/mongo/MongoProperties.java +++ b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/mongo/MongoProperties.java @@ -16,75 +16,86 @@ package org.springframework.boot.autoconfigure.mongo; -import java.net.UnknownHostException; - -import org.springframework.boot.context.properties.ConfigurationProperties; - import com.mongodb.DBPort; import com.mongodb.MongoClient; import com.mongodb.MongoClientURI; +import org.springframework.boot.context.properties.ConfigurationProperties; + +import java.net.UnknownHostException; /** * Configuration properties for Mongo. - * + * * @author Dave Syer * @author Phillip Webb + * @author Josh Long */ @ConfigurationProperties(prefix = "spring.data.mongodb") public class MongoProperties { - private String host; + private String host; - private int port = DBPort.PORT; + private int port = DBPort.PORT; - private String uri = "mongodb://localhost/test"; + private String uri = "mongodb://localhost/test"; - private String database; + private String database; - public String getHost() { - return this.host; - } + private String gridFsDatabase; - public void setHost(String host) { - this.host = host; - } - public String getDatabase() { - return this.database; - } + public String getHost() { + return this.host; + } - public void setDatabase(String database) { - this.database = database; - } + public void setHost(String host) { + this.host = host; + } - public String getUri() { - return this.uri; - } + public String getDatabase() { + return this.database; + } - public void setUri(String uri) { - this.uri = uri; - } + public void setDatabase(String database) { + this.database = database; + } - public int getPort() { - return this.port; - } + public String getUri() { + return this.uri; + } - public void setPort(int port) { - this.port = port; - } + public void setUri(String uri) { + this.uri = uri; + } - public String getMongoClientDatabase() { - if (this.database != null) { - return this.database; - } - return new MongoClientURI(this.uri).getDatabase(); - } + public int getPort() { + return this.port; + } - public MongoClient createMongoClient() throws UnknownHostException { - if (this.host != null) { - return new MongoClient(this.host, this.port); - } - return new MongoClient(new MongoClientURI(this.uri)); - } + public void setPort(int port) { + this.port = port; + } + + public String getGridFsDatabase() { + return gridFsDatabase; + } + + public void setGridFsDatabase(String gridFsDatabase) { + this.gridFsDatabase = gridFsDatabase; + } + + public String getMongoClientDatabase() { + if (this.database != null) { + return this.database; + } + return new MongoClientURI(this.uri).getDatabase(); + } + + public MongoClient createMongoClient() throws UnknownHostException { + if (this.host != null) { + return new MongoClient(this.host, this.port); + } + return new MongoClient(new MongoClientURI(this.uri)); + } } diff --git a/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/mongo/GridFsTemplateAutoConfigurationTests.java b/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/mongo/GridFsTemplateAutoConfigurationTests.java new file mode 100644 index 00000000000..17a230b1bb7 --- /dev/null +++ b/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/mongo/GridFsTemplateAutoConfigurationTests.java @@ -0,0 +1,31 @@ +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; + +public class GridFsTemplateAutoConfigurationTests { + + private AnnotationConfigApplicationContext context; + + @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); + } +}