diff --git a/spring-boot-autoconfigure/pom.xml b/spring-boot-autoconfigure/pom.xml
index 18eb347285..83397088da 100644
--- a/spring-boot-autoconfigure/pom.xml
+++ b/spring-boot-autoconfigure/pom.xml
@@ -136,6 +136,11 @@
spring-data-mongodb
true
+
+ org.springframework.data
+ spring-data-couchbase
+ true
+
org.springframework.data
spring-data-redis
diff --git a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/data/CouchbaseRepositoriesAutoConfiguration.java b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/data/CouchbaseRepositoriesAutoConfiguration.java
new file mode 100644
index 0000000000..2852561617
--- /dev/null
+++ b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/data/CouchbaseRepositoriesAutoConfiguration.java
@@ -0,0 +1,114 @@
+/*
+ * 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.data;
+
+import java.io.IOException;
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.util.Arrays;
+
+import javax.annotation.PreDestroy;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.boot.context.properties.EnableConfigurationProperties;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.Import;
+import org.springframework.data.couchbase.core.CouchbaseTemplate;
+import org.springframework.data.couchbase.repository.CouchbaseRepository;
+import org.springframework.data.couchbase.repository.config.EnableCouchbaseRepositories;
+
+import com.couchbase.client.CouchbaseClient;
+
+/**
+ * {@link EnableAutoConfiguration Auto-configuration} for Spring Data's Couchbase
+ * Repositories.
+ *
+ * @author Michael Nitschinger
+ * @see EnableCouchbaseRepositories
+ */
+@Configuration
+@ConditionalOnClass({ CouchbaseClient.class, CouchbaseRepository.class })
+public class CouchbaseRepositoriesAutoConfiguration {
+
+ @Import(CouchbaseRepositoriesAutoConfigureRegistrar.class)
+ @Configuration
+ @EnableConfigurationProperties(CouchbaseProperties.class)
+ protected static class CouchbaseRepositoriesConfiguration {
+
+ @Autowired
+ private CouchbaseProperties config;
+
+ @PreDestroy
+ public void close() throws URISyntaxException, IOException {
+ couchbaseClient().shutdown();
+ }
+
+ @Bean
+ @ConditionalOnMissingBean(CouchbaseClient.class)
+ CouchbaseClient couchbaseClient() throws URISyntaxException, IOException {
+ return this.config.couchbaseClient();
+ }
+
+ @Bean
+ @ConditionalOnMissingBean(CouchbaseTemplate.class)
+ CouchbaseTemplate couchbaseTemplate(CouchbaseClient couchbaseClient) {
+ return new CouchbaseTemplate(couchbaseClient);
+ }
+ }
+
+ @ConfigurationProperties(prefix = "spring.data.couchbase")
+ public static class CouchbaseProperties {
+
+ private String host = "127.0.0.1";
+ private String bucket = "default";
+ private String password = "";
+
+ public CouchbaseClient couchbaseClient() throws URISyntaxException, IOException {
+ return new CouchbaseClient(Arrays.asList(new URI("http://" + getHost()
+ + ":8091/pools")), getBucket(), getPassword());
+ }
+
+ public String getHost() {
+ return this.host;
+ }
+
+ public void setHost(String host) {
+ this.host = host;
+ }
+
+ public String getBucket() {
+ return this.bucket;
+ }
+
+ public void setBucket(String bucket) {
+ this.bucket = bucket;
+ }
+
+ public String getPassword() {
+ return this.password;
+ }
+
+ public void setPassword(String password) {
+ this.password = password;
+ }
+ }
+}
diff --git a/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/data/CouchbaseRepositoriesAutoConfigureRegistrar.java b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/data/CouchbaseRepositoriesAutoConfigureRegistrar.java
new file mode 100644
index 0000000000..336d2f5f7d
--- /dev/null
+++ b/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/data/CouchbaseRepositoriesAutoConfigureRegistrar.java
@@ -0,0 +1,55 @@
+/*
+ * 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.data;
+
+import org.springframework.data.couchbase.repository.config.CouchbaseRepositoryConfigurationExtension;
+import org.springframework.data.couchbase.repository.config.EnableCouchbaseRepositories;
+import org.springframework.data.repository.config.RepositoryConfigurationExtension;
+
+import java.lang.annotation.Annotation;
+
+import org.springframework.context.annotation.ImportBeanDefinitionRegistrar;
+
+/**
+ * {@link ImportBeanDefinitionRegistrar} used to auto-configure Spring Data Couchbase
+ * Repositories.
+ *
+ * @author Michael Nitschinger
+ */
+class CouchbaseRepositoriesAutoConfigureRegistrar extends
+ AbstractRepositoryConfigurationSourceSupport {
+
+ @Override
+ protected Class extends Annotation> getAnnotation() {
+ return EnableCouchbaseRepositories.class;
+ }
+
+ @Override
+ protected Class> getConfiguration() {
+ return EnableCouchbaseRepositoriesConfiguration.class;
+ }
+
+ @Override
+ protected RepositoryConfigurationExtension getRepositoryConfigurationExtension() {
+ return new CouchbaseRepositoryConfigurationExtension();
+ }
+
+ @EnableCouchbaseRepositories
+ private static class EnableCouchbaseRepositoriesConfiguration {
+ }
+
+}
diff --git a/spring-boot-autoconfigure/src/main/resources/META-INF/spring.factories b/spring-boot-autoconfigure/src/main/resources/META-INF/spring.factories
index feed488f05..8b9d75b67c 100644
--- a/spring-boot-autoconfigure/src/main/resources/META-INF/spring.factories
+++ b/spring-boot-autoconfigure/src/main/resources/META-INF/spring.factories
@@ -13,6 +13,7 @@ org.springframework.boot.autoconfigure.data.JpaRepositoriesAutoConfiguration,\
org.springframework.boot.autoconfigure.data.MongoRepositoriesAutoConfiguration,\
org.springframework.boot.autoconfigure.hateoas.HypermediaAutoConfiguration,\
org.springframework.boot.autoconfigure.data.rest.RepositoryRestMvcAutoConfiguration,\
+org.springframework.boot.autoconfigure.data.CouchbaseRepositoriesAutoConfiguration,\
org.springframework.boot.autoconfigure.redis.RedisAutoConfiguration,\
org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration,\
org.springframework.boot.autoconfigure.jdbc.DataSourceTransactionManagerAutoConfiguration,\
diff --git a/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/data/CouchbaseRepositoriesAutoConfigurationTests.java b/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/data/CouchbaseRepositoriesAutoConfigurationTests.java
new file mode 100644
index 0000000000..efea2bc3b3
--- /dev/null
+++ b/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/data/CouchbaseRepositoriesAutoConfigurationTests.java
@@ -0,0 +1,81 @@
+/*
+ * 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.data;
+
+import org.junit.Test;
+import org.springframework.boot.autoconfigure.PropertyPlaceholderAutoConfiguration;
+import org.springframework.boot.autoconfigure.TestAutoConfigurationPackage;
+import org.springframework.boot.autoconfigure.data.couchbase.City;
+import org.springframework.boot.autoconfigure.data.couchbase.CityRepository;
+import org.springframework.context.annotation.AnnotationConfigApplicationContext;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+import com.couchbase.client.CouchbaseClient;
+
+import static org.junit.Assert.assertNotNull;
+import static org.mockito.Mockito.mock;
+
+/**
+ * Tests for {@link CouchbaseRepositoriesAutoConfiguration}.
+ *
+ * @author Michael Nitschinger
+ */
+public class CouchbaseRepositoriesAutoConfigurationTests {
+
+ private AnnotationConfigApplicationContext context;
+
+ @Test
+ public void testDefaultRepositoryConfiguration() throws Exception {
+ this.context = new AnnotationConfigApplicationContext();
+ this.context.register(TestConfiguration.class,
+ CouchbaseRepositoriesAutoConfiguration.class,
+ PropertyPlaceholderAutoConfiguration.class);
+ this.context.refresh();
+ assertNotNull(this.context.getBean(CityRepository.class));
+ assertNotNull(this.context.getBean(CouchbaseClient.class));
+ }
+
+ @Test
+ public void testNoRepositoryConfiguration() throws Exception {
+ this.context = new AnnotationConfigApplicationContext();
+ this.context.register(EmptyConfiguration.class,
+ CouchbaseRepositoriesAutoConfiguration.class,
+ PropertyPlaceholderAutoConfiguration.class);
+ this.context.refresh();
+ assertNotNull(this.context.getBean(CouchbaseClient.class));
+ }
+
+ @Configuration
+ @TestAutoConfigurationPackage(City.class)
+ protected static class TestConfiguration {
+ @Bean
+ public CouchbaseClient clientMock() {
+ return mock(CouchbaseClient.class);
+ }
+ }
+
+ @Configuration
+ @TestAutoConfigurationPackage(CouchbaseRepositoriesAutoConfigurationTests.class)
+ protected static class EmptyConfiguration {
+ @Bean
+ public CouchbaseClient clientMock() {
+ return mock(CouchbaseClient.class);
+ }
+ }
+
+}
diff --git a/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/data/couchbase/City.java b/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/data/couchbase/City.java
new file mode 100644
index 0000000000..f1d9e18707
--- /dev/null
+++ b/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/data/couchbase/City.java
@@ -0,0 +1,83 @@
+/*
+ * 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.data.couchbase;
+
+import org.springframework.data.annotation.Id;
+import org.springframework.data.couchbase.core.mapping.Document;
+
+import java.io.Serializable;
+
+/**
+ * @author Michael Nitschinger
+ */
+@Document
+public class City implements Serializable {
+
+ @Id
+ private String id;
+
+ private String name;
+ private String state;
+ private String country;
+ private String map;
+
+ public City(String id, String name, String country) {
+ this.id = id;
+ this.name = name;
+ this.country = country;
+ }
+
+ public String getId() {
+ return id;
+ }
+
+ public void setId(String id) {
+ this.id = id;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public String getState() {
+ return state;
+ }
+
+ public void setState(String state) {
+ this.state = state;
+ }
+
+ public String getCountry() {
+ return country;
+ }
+
+ public void setCountry(String country) {
+ this.country = country;
+ }
+
+ public String getMap() {
+ return map;
+ }
+
+ public void setMap(String map) {
+ this.map = map;
+ }
+}
diff --git a/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/data/couchbase/CityRepository.java b/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/data/couchbase/CityRepository.java
new file mode 100644
index 0000000000..f06acc3cca
--- /dev/null
+++ b/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/data/couchbase/CityRepository.java
@@ -0,0 +1,25 @@
+/*
+ * 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.data.couchbase;
+
+import org.springframework.data.couchbase.repository.CouchbaseRepository;
+
+/**
+ * @author Michael Nitschinger
+ */
+public interface CityRepository extends CouchbaseRepository {
+}
diff --git a/spring-boot-dependencies/pom.xml b/spring-boot-dependencies/pom.xml
index ea9efbd0db..1f171d7d00 100644
--- a/spring-boot-dependencies/pom.xml
+++ b/spring-boot-dependencies/pom.xml
@@ -83,6 +83,7 @@
4.0.3.RELEASE
3.0.2.RELEASE
2.2.6.RELEASE
+ 1.0.0.RELEASE
1.1.1.RELEASE
Codd-SR2
0.9.0.RELEASE
@@ -518,6 +519,11 @@
pom
import
+
+ org.springframework.data
+ spring-data-couchbase
+ ${spring-data-couchbase.version}
+
org.springframework.data
spring-data-redis
diff --git a/spring-boot-starters/pom.xml b/spring-boot-starters/pom.xml
index 7a7756a061..415e372c1e 100644
--- a/spring-boot-starters/pom.xml
+++ b/spring-boot-starters/pom.xml
@@ -24,6 +24,7 @@
spring-boot-starter-amqp
spring-boot-starter-aop
spring-boot-starter-batch
+ spring-boot-starter-data-couchbase
spring-boot-starter-data-jpa
spring-boot-starter-data-mongodb
spring-boot-starter-integration
diff --git a/spring-boot-starters/spring-boot-starter-data-couchbase/.gitignore b/spring-boot-starters/spring-boot-starter-data-couchbase/.gitignore
new file mode 100644
index 0000000000..ea8c4bf7f3
--- /dev/null
+++ b/spring-boot-starters/spring-boot-starter-data-couchbase/.gitignore
@@ -0,0 +1 @@
+/target
diff --git a/spring-boot-starters/spring-boot-starter-data-couchbase/pom.xml b/spring-boot-starters/spring-boot-starter-data-couchbase/pom.xml
new file mode 100644
index 0000000000..6cf377e59e
--- /dev/null
+++ b/spring-boot-starters/spring-boot-starter-data-couchbase/pom.xml
@@ -0,0 +1,21 @@
+
+
+ 4.0.0
+
+ org.springframework.boot
+ spring-boot-starters
+ 0.5.0.BUILD-SNAPSHOT
+
+ spring-boot-starter-data-couchbase
+ jar
+
+ ${basedir}/../..
+
+
+
+ org.springframework.data
+ spring-data-couchbase
+
+
+
diff --git a/spring-boot-starters/spring-boot-starter-parent/pom.xml b/spring-boot-starters/spring-boot-starter-parent/pom.xml
index c7f4db598d..26d9000524 100644
--- a/spring-boot-starters/spring-boot-starter-parent/pom.xml
+++ b/spring-boot-starters/spring-boot-starter-parent/pom.xml
@@ -86,6 +86,11 @@
spring-boot-starter-data-rest
${spring-boot.version}
+
+ org.springframework.boot
+ spring-boot-starter-data-couchbase
+ 0.5.0.BUILD-SNAPSHOT
+
org.springframework.boot
spring-boot-starter-integration