diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/config/GridFsTemplateParser.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/config/GridFsTemplateParser.java
index 9f1351e74..04b99dd9c 100644
--- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/config/GridFsTemplateParser.java
+++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/config/GridFsTemplateParser.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2013 the original author or authors.
+ * Copyright 2013-2014 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.
@@ -57,6 +57,7 @@ class GridFsTemplateParser extends AbstractBeanDefinitionParser {
String converterRef = element.getAttribute("converter-ref");
String dbFactoryRef = element.getAttribute("db-factory-ref");
+ String bucket = element.getAttribute("bucket");
BeanDefinitionBuilder gridFsTemplateBuilder = BeanDefinitionBuilder.genericBeanDefinition(GridFsTemplate.class);
@@ -72,6 +73,10 @@ class GridFsTemplateParser extends AbstractBeanDefinitionParser {
gridFsTemplateBuilder.addConstructorArgReference(BeanNames.DEFAULT_CONVERTER_BEAN_NAME);
}
+ if (StringUtils.hasText(bucket)) {
+ gridFsTemplateBuilder.addConstructorArgValue(bucket);
+ }
+
return (AbstractBeanDefinition) helper.getComponentIdButFallback(gridFsTemplateBuilder, BeanNames.GRID_FS_TEMPLATE)
.getBeanDefinition();
}
diff --git a/spring-data-mongodb/src/main/resources/org/springframework/data/mongodb/config/spring-mongo-1.4.xsd b/spring-data-mongodb/src/main/resources/org/springframework/data/mongodb/config/spring-mongo-1.4.xsd
index 749e3c374..c036f6b50 100644
--- a/spring-data-mongodb/src/main/resources/org/springframework/data/mongodb/config/spring-mongo-1.4.xsd
+++ b/spring-data-mongodb/src/main/resources/org/springframework/data/mongodb/config/spring-mongo-1.4.xsd
@@ -628,6 +628,12 @@ The reference to a Mongoconverter instance.
+
+
+
+
+
\ No newline at end of file
diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/config/MongoNamespaceTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/config/MongoNamespaceTests.java
index 1dacf982e..2df29615d 100644
--- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/config/MongoNamespaceTests.java
+++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/config/MongoNamespaceTests.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2010-2013 the original author or authors.
+ * Copyright 2010-2014 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.
@@ -53,8 +53,10 @@ public class MongoNamespaceTests {
@Test
public void testMongoSingleton() throws Exception {
+
assertTrue(ctx.containsBean("noAttrMongo"));
MongoFactoryBean mfb = (MongoFactoryBean) ctx.getBean("&noAttrMongo");
+
assertNull(getField(mfb, "host"));
assertNull(getField(mfb, "port"));
}
@@ -64,8 +66,10 @@ public class MongoNamespaceTests {
assertTrue(ctx.containsBean("defaultMongo"));
MongoFactoryBean mfb = (MongoFactoryBean) ctx.getBean("&defaultMongo");
+
String host = (String) getField(mfb, "host");
Integer port = (Integer) getField(mfb, "port");
+
assertEquals("localhost", host);
assertEquals(new Integer(27017), port);
@@ -105,8 +109,10 @@ public class MongoNamespaceTests {
@Test
public void testSecondMongoDbFactory() {
+
assertTrue(ctx.containsBean("secondMongoDbFactory"));
MongoDbFactory dbf = (MongoDbFactory) ctx.getBean("secondMongoDbFactory");
+
Mongo mongo = (Mongo) getField(dbf, "mongo");
assertEquals("localhost", mongo.getAddress().getHost());
assertEquals(27017, mongo.getAddress().getPort());
@@ -137,10 +143,13 @@ public class MongoNamespaceTests {
*/
@Test
public void testMongoTemplateFactory() {
+
assertTrue(ctx.containsBean("mongoTemplate"));
MongoOperations operations = (MongoOperations) ctx.getBean("mongoTemplate");
+
MongoDbFactory dbf = (MongoDbFactory) getField(operations, "mongoDbFactory");
assertEquals("database", getField(dbf, "databaseName"));
+
MongoConverter converter = (MongoConverter) getField(operations, "mongoConverter");
assertNotNull(converter);
}
@@ -150,10 +159,13 @@ public class MongoNamespaceTests {
*/
@Test
public void testSecondMongoTemplateFactory() {
+
assertTrue(ctx.containsBean("anotherMongoTemplate"));
MongoOperations operations = (MongoOperations) ctx.getBean("anotherMongoTemplate");
+
MongoDbFactory dbf = (MongoDbFactory) getField(operations, "mongoDbFactory");
assertEquals("database", getField(dbf, "databaseName"));
+
WriteConcern writeConcern = (WriteConcern) getField(operations, "writeConcern");
assertEquals(WriteConcern.SAFE, writeConcern);
}
@@ -163,10 +175,13 @@ public class MongoNamespaceTests {
*/
@Test
public void testGridFsTemplateFactory() {
+
assertTrue(ctx.containsBean("gridFsTemplate"));
GridFsOperations operations = (GridFsOperations) ctx.getBean("gridFsTemplate");
+
MongoDbFactory dbf = (MongoDbFactory) getField(operations, "dbFactory");
assertEquals("database", getField(dbf, "databaseName"));
+
MongoConverter converter = (MongoConverter) getField(operations, "converter");
assertNotNull(converter);
}
@@ -176,10 +191,31 @@ public class MongoNamespaceTests {
*/
@Test
public void testSecondGridFsTemplateFactory() {
- assertTrue(ctx.containsBean("antoherGridFsTemplate"));
- GridFsOperations operations = (GridFsOperations) ctx.getBean("antoherGridFsTemplate");
+
+ assertTrue(ctx.containsBean("secondGridFsTemplate"));
+ GridFsOperations operations = (GridFsOperations) ctx.getBean("secondGridFsTemplate");
+
MongoDbFactory dbf = (MongoDbFactory) getField(operations, "dbFactory");
assertEquals("database", getField(dbf, "databaseName"));
+ assertEquals(null, getField(operations, "bucket"));
+
+ MongoConverter converter = (MongoConverter) getField(operations, "converter");
+ assertNotNull(converter);
+ }
+
+ /**
+ * @see DATAMONGO-823
+ */
+ @Test
+ public void testThirdGridFsTemplateFactory() {
+
+ assertTrue(ctx.containsBean("thirdGridFsTemplate"));
+ GridFsOperations operations = (GridFsOperations) ctx.getBean("thirdGridFsTemplate");
+
+ MongoDbFactory dbf = (MongoDbFactory) getField(operations, "dbFactory");
+ assertEquals("database", getField(dbf, "databaseName"));
+ assertEquals("bucketString", getField(operations, "bucket"));
+
MongoConverter converter = (MongoConverter) getField(operations, "converter");
assertNotNull(converter);
}
@@ -187,14 +223,19 @@ public class MongoNamespaceTests {
@Test
@SuppressWarnings("deprecation")
public void testMongoSingletonWithPropertyPlaceHolders() throws Exception {
+
assertTrue(ctx.containsBean("mongo"));
MongoFactoryBean mfb = (MongoFactoryBean) ctx.getBean("&mongo");
+
String host = (String) getField(mfb, "host");
Integer port = (Integer) getField(mfb, "port");
+
assertEquals("127.0.0.1", host);
assertEquals(new Integer(27017), port);
+
Mongo mongo = mfb.getObject();
MongoOptions mongoOpts = mongo.getMongoOptions();
+
assertEquals(8, mongoOpts.connectionsPerHost);
assertEquals(1000, mongoOpts.connectTimeout);
assertEquals(1500, mongoOpts.maxWaitTime);
diff --git a/spring-data-mongodb/src/test/resources/org/springframework/data/mongodb/config/MongoNamespaceTests-context.xml b/spring-data-mongodb/src/test/resources/org/springframework/data/mongodb/config/MongoNamespaceTests-context.xml
index 056c63812..cfb76c954 100644
--- a/spring-data-mongodb/src/test/resources/org/springframework/data/mongodb/config/MongoNamespaceTests-context.xml
+++ b/spring-data-mongodb/src/test/resources/org/springframework/data/mongodb/config/MongoNamespaceTests-context.xml
@@ -76,6 +76,7 @@
-
+
+