Reinstate support for Spring Data Couchbase
Closes gh-28976
This commit is contained in:
@@ -258,6 +258,7 @@ boot-features-connecting-to-cassandra=features.nosql.cassandra.connecting
|
||||
boot-features-spring-data-cassandra-repositories=features.nosql.cassandra.repositories
|
||||
boot-features-couchbase=features.nosql.couchbase
|
||||
boot-features-connecting-to-couchbase=features.nosql.couchbase.connecting
|
||||
boot-features-spring-data-couchbase-repositories=features.nosql.couchbase.repositories
|
||||
boot-features-ldap=features.nosql.ldap
|
||||
boot-features-ldap-connecting=features.nosql.ldap.connecting
|
||||
boot-features-ldap-spring-data-repositories=features.nosql.ldap.repositories
|
||||
@@ -270,6 +271,7 @@ boot-features-caching-provider-generic=features.caching.provider.generic
|
||||
boot-features-caching-provider-jcache=features.caching.provider.jcache
|
||||
boot-features-caching-provider-hazelcast=features.caching.provider.hazelcast
|
||||
boot-features-caching-provider-infinispan=features.caching.provider.infinispan
|
||||
boot-features-caching-provider-couchbase=features.caching.provider.couchbase
|
||||
boot-features-caching-provider-redis=features.caching.provider.redis
|
||||
boot-features-caching-provider-caffeine=features.caching.provider.caffeine
|
||||
boot-features-caching-provider-simple=features.caching.provider.simple
|
||||
@@ -766,6 +768,7 @@ features.caching.provider.generic=io.caching.provider.generic
|
||||
features.caching.provider.jcache=io.caching.provider.jcache
|
||||
features.caching.provider.hazelcast=io.caching.provider.hazelcast
|
||||
features.caching.provider.infinispan=io.caching.provider.infinispan
|
||||
features.caching.provider.couchbase=io.caching.provider.couchbase
|
||||
features.caching.provider.redis=io.caching.provider.redis
|
||||
features.caching.provider.caffeine=io.caching.provider.caffeine
|
||||
features.caching.provider.simple=io.caching.provider.simple
|
||||
@@ -882,6 +885,7 @@ features.nosql.cassandra.connecting=data.nosql.cassandra.connecting
|
||||
features.nosql.cassandra.repositories=data.nosql.cassandra.repositories
|
||||
features.nosql.couchbase=data.nosql.couchbase
|
||||
features.nosql.couchbase.connecting=data.nosql.couchbase.connecting
|
||||
features.nosql.couchbase.repositories=data.nosql.couchbase.repositories
|
||||
features.nosql.ldap=data.nosql.ldap
|
||||
features.nosql.ldap.connecting=data.nosql.ldap.connecting
|
||||
features.nosql.ldap.repositories=data.nosql.ldap.repositories
|
||||
|
||||
@@ -57,6 +57,8 @@
|
||||
:spring-data: https://spring.io/projects/spring-data
|
||||
:spring-data-cassandra: https://spring.io/projects/spring-data-cassandra
|
||||
:spring-data-commons-api: https://docs.spring.io/spring-data/commons/docs/{spring-data-commons-version}/api/org/springframework/data
|
||||
:spring-data-couchbase: https://spring.io/projects/spring-data-couchbase
|
||||
:spring-data-couchbase-docs: https://docs.spring.io/spring-data/couchbase/docs/{spring-data-couchbase-version}/reference/html/
|
||||
:spring-data-elasticsearch: https://spring.io/projects/spring-data-elasticsearch
|
||||
:spring-data-elasticsearch-docs: https://docs.spring.io/spring-data/elasticsearch/docs/current/reference/html/
|
||||
:spring-data-envers: https://spring.io/projects/spring-data-envers
|
||||
|
||||
@@ -8,6 +8,7 @@ Spring Data provides additional projects that help you access a variety of NoSQL
|
||||
* {spring-data-redis}[Redis]
|
||||
* {spring-data-gemfire}[GemFire] or {spring-data-geode}[Geode]
|
||||
* {spring-data-cassandra}[Cassandra]
|
||||
* {spring-data-couchbase}[Couchbase]
|
||||
* {spring-data-ldap}[LDAP]
|
||||
|
||||
Spring Boot provides auto-configuration for Redis, MongoDB, Neo4j, Solr, Elasticsearch, Cassandra, Couchbase, LDAP and InfluxDB.
|
||||
@@ -455,7 +456,9 @@ TIP: For complete details of Spring Data Cassandra, see the https://docs.spring.
|
||||
[[data.nosql.couchbase]]
|
||||
=== Couchbase
|
||||
https://www.couchbase.com/[Couchbase] is an open-source, distributed, multi-model NoSQL document-oriented database that is optimized for interactive applications.
|
||||
Spring Boot offers auto-configuration for Couchbase.
|
||||
Spring Boot offers auto-configuration for Couchbase and the abstractions on top of it provided by https://github.com/spring-projects/spring-data-couchbase[Spring Data Couchbase].
|
||||
There are `spring-boot-starter-data-couchbase` and `spring-boot-starter-data-couchbase-reactive` "`Starters`" for collecting the dependencies in a convenient way.
|
||||
|
||||
|
||||
|
||||
[[data.nosql.couchbase.connecting]]
|
||||
@@ -493,6 +496,45 @@ To take more control, one or more `ClusterEnvironmentBuilderCustomizer` beans ca
|
||||
|
||||
|
||||
|
||||
[[data.nosql.couchbase.repositories]]
|
||||
==== Spring Data Couchbase Repositories
|
||||
Spring Data includes repository support for Couchbase.
|
||||
For complete details of Spring Data Couchbase, see the {spring-data-couchbase-docs}[reference documentation].
|
||||
|
||||
You can inject an auto-configured `CouchbaseTemplate` instance as you would with any other Spring Bean, provided a `CouchbaseClientFactory` bean is available.
|
||||
This happens when a `Cluster` is available, as described above, and a bucket name has been specified:
|
||||
|
||||
[source,yaml,indent=0,subs="verbatim",configprops,configblocks]
|
||||
----
|
||||
spring:
|
||||
data:
|
||||
couchbase:
|
||||
bucket-name: "my-bucket"
|
||||
----
|
||||
|
||||
The following examples shows how to inject a `CouchbaseTemplate` bean:
|
||||
|
||||
[source,java,indent=0,subs="verbatim"]
|
||||
----
|
||||
include::{docs-java}/data/nosql/couchbase/repositories/MyBean.java[]
|
||||
----
|
||||
|
||||
There are a few beans that you can define in your own configuration to override those provided by the auto-configuration:
|
||||
|
||||
* A `CouchbaseMappingContext` `@Bean` with a name of `couchbaseMappingContext`.
|
||||
* A `CustomConversions` `@Bean` with a name of `couchbaseCustomConversions`.
|
||||
* A `CouchbaseTemplate` `@Bean` with a name of `couchbaseTemplate`.
|
||||
|
||||
To avoid hard-coding those names in your own config, you can reuse `BeanNames` provided by Spring Data Couchbase.
|
||||
For instance, you can customize the converters to use, as follows:
|
||||
|
||||
[source,java,indent=0,subs="verbatim"]
|
||||
----
|
||||
include::{docs-java}/data/nosql/couchbase/repositories/MyCouchbaseConfiguration.java[]
|
||||
----
|
||||
|
||||
|
||||
|
||||
[[data.nosql.ldap]]
|
||||
=== LDAP
|
||||
https://en.wikipedia.org/wiki/Lightweight_Directory_Access_Protocol[LDAP] (Lightweight Directory Access Protocol) is an open, vendor-neutral, industry standard application protocol for accessing and maintaining distributed directory information services over an IP network.
|
||||
|
||||
@@ -42,6 +42,7 @@ If you have not defined a bean of type `CacheManager` or a `CacheResolver` named
|
||||
. <<io#io.caching.provider.generic,Generic>>
|
||||
. <<io#io.caching.provider.jcache,JCache (JSR-107)>> (Hazelcast and others)
|
||||
. <<io#io.caching.provider.hazelcast,Hazelcast>>
|
||||
. <<io#io.caching.provider.couchbase,Couchbase>>
|
||||
. <<io#io.caching.provider.redis,Redis>>
|
||||
. <<io#io.caching.provider.caffeine,Caffeine>>
|
||||
. <<io#io.caching.provider.simple,Simple>>
|
||||
@@ -116,6 +117,31 @@ If a `HazelcastInstance` has been auto-configured, it is automatically wrapped i
|
||||
|
||||
|
||||
|
||||
[[io.caching.provider.couchbase]]
|
||||
==== Couchbase
|
||||
If Spring Data Couchbase is available and Couchbase is <<data#data.nosql.couchbase,configured>>, a `CouchbaseCacheManager` is auto-configured.
|
||||
It is possible to create additional caches on startup by setting the configprop:spring.cache.cache-names[] property and cache defaults can be configured by using `spring.cache.couchbase.*` properties.
|
||||
For instance, the following configuration creates `cache1` and `cache2` caches with an entry _expiration_ of 10 minutes:
|
||||
|
||||
[source,yaml,indent=0,subs="verbatim",configprops,configblocks]
|
||||
----
|
||||
spring:
|
||||
cache:
|
||||
cache-names: "cache1,cache2"
|
||||
couchbase:
|
||||
expiration: "10m"
|
||||
----
|
||||
|
||||
If you need more control over the configuration, consider registering a `CouchbaseCacheManagerBuilderCustomizer` bean.
|
||||
The following example shows a customizer that configures a specific entry expiration for `cache1` and `cache2`:
|
||||
|
||||
[source,java,indent=0,subs="verbatim"]
|
||||
----
|
||||
include::{docs-java}/io/caching/provider/couchbase/MyCouchbaseCacheManagerConfiguration.java[]
|
||||
----
|
||||
|
||||
|
||||
|
||||
[[io.caching.provider.redis]]
|
||||
==== Redis
|
||||
If https://redis.io/[Redis] is available and configured, a `RedisCacheManager` is auto-configured.
|
||||
|
||||
@@ -0,0 +1,21 @@
|
||||
/*
|
||||
* Copyright 2012-2021 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
|
||||
*
|
||||
* https://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.docs.data.nosql.couchbase.repositories;
|
||||
|
||||
class CouchbaseProperties {
|
||||
|
||||
}
|
||||
@@ -0,0 +1,37 @@
|
||||
/*
|
||||
* Copyright 2012-2021 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
|
||||
*
|
||||
* https://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.docs.data.nosql.couchbase.repositories;
|
||||
|
||||
import org.springframework.data.couchbase.core.CouchbaseTemplate;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
@Component
|
||||
public class MyBean {
|
||||
|
||||
private final CouchbaseTemplate template;
|
||||
|
||||
public MyBean(CouchbaseTemplate template) {
|
||||
this.template = template;
|
||||
}
|
||||
|
||||
// @fold:on // ...
|
||||
public String someMethod() {
|
||||
return this.template.getBucketName();
|
||||
}
|
||||
// @fold:off
|
||||
|
||||
}
|
||||
@@ -0,0 +1,28 @@
|
||||
/*
|
||||
* Copyright 2012-2021 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
|
||||
*
|
||||
* https://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.docs.data.nosql.couchbase.repositories;
|
||||
|
||||
import org.springframework.core.convert.converter.Converter;
|
||||
|
||||
class MyConverter implements Converter<CouchbaseProperties, Boolean> {
|
||||
|
||||
@Override
|
||||
public Boolean convert(CouchbaseProperties value) {
|
||||
return true;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,34 @@
|
||||
/*
|
||||
* Copyright 2012-2021 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
|
||||
*
|
||||
* https://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.docs.data.nosql.couchbase.repositories;
|
||||
|
||||
import org.assertj.core.util.Arrays;
|
||||
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.data.couchbase.config.BeanNames;
|
||||
import org.springframework.data.couchbase.core.convert.CouchbaseCustomConversions;
|
||||
|
||||
@Configuration(proxyBeanMethods = false)
|
||||
public class MyCouchbaseConfiguration {
|
||||
|
||||
@Bean(BeanNames.COUCHBASE_CUSTOM_CONVERSIONS)
|
||||
public CouchbaseCustomConversions myCustomConversions() {
|
||||
return new CouchbaseCustomConversions(Arrays.asList(new MyConverter()));
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,41 @@
|
||||
/*
|
||||
* Copyright 2012-2021 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
|
||||
*
|
||||
* https://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.docs.io.caching.provider.couchbase;
|
||||
|
||||
import java.time.Duration;
|
||||
|
||||
import org.springframework.boot.autoconfigure.cache.CouchbaseCacheManagerBuilderCustomizer;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.data.couchbase.cache.CouchbaseCacheConfiguration;
|
||||
|
||||
@Configuration(proxyBeanMethods = false)
|
||||
public class MyCouchbaseCacheManagerConfiguration {
|
||||
|
||||
@Bean
|
||||
public CouchbaseCacheManagerBuilderCustomizer myCouchbaseCacheManagerBuilderCustomizer() {
|
||||
// @formatter:off
|
||||
return (builder) -> builder
|
||||
.withCacheConfiguration("cache1", CouchbaseCacheConfiguration
|
||||
.defaultCacheConfig().entryExpiry(Duration.ofSeconds(10)))
|
||||
.withCacheConfiguration("cache2", CouchbaseCacheConfiguration
|
||||
.defaultCacheConfig().entryExpiry(Duration.ofMinutes(1)));
|
||||
// @formatter:on
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user