diff --git a/src/main/java/org/springframework/data/couchbase/config/AbstractCouchbaseConfiguration.java b/src/main/java/org/springframework/data/couchbase/config/AbstractCouchbaseConfiguration.java index 52d7346e..dac1de92 100644 --- a/src/main/java/org/springframework/data/couchbase/config/AbstractCouchbaseConfiguration.java +++ b/src/main/java/org/springframework/data/couchbase/config/AbstractCouchbaseConfiguration.java @@ -59,7 +59,7 @@ import com.couchbase.client.java.json.JacksonTransformers; * @author Subhashni Balakrishnan */ @Configuration -public abstract class AbstractCouchbaseConfiguration { +public abstract class AbstractCouchbaseConfiguration implements CouchbaseConfigurer { public abstract String getConnectionString(); @@ -78,13 +78,15 @@ public abstract class AbstractCouchbaseConfiguration { } @Bean + @Override public CouchbaseClientFactory couchbaseClientFactory(ClusterEnvironment clusterEnvironment) { return new SimpleCouchbaseClientFactory(getConnectionString(), authenticator(), getBucketName(), getScopeName(), clusterEnvironment); } + @Override @Bean(destroyMethod = "shutdown") - protected ClusterEnvironment clusterEnvironment() { + public ClusterEnvironment clusterEnvironment() { ClusterEnvironment.Builder builder = ClusterEnvironment.builder(); configureEnvironment(builder); return builder.build(); @@ -149,7 +151,8 @@ public abstract class AbstractCouchbaseConfiguration { /** * Determines the name of the field that will store the type information for complex types when using the - * {@link #mappingCouchbaseConverter()}. Defaults to {@value MappingCouchbaseConverter#TYPEKEY_DEFAULT}. + * {@link #mappingCouchbaseConverter(CouchbaseMappingContext, CouchbaseCustomConversions)}. Defaults + * to {@value MappingCouchbaseConverter#TYPEKEY_DEFAULT}. * * @see MappingCouchbaseConverter#TYPEKEY_DEFAULT * @see MappingCouchbaseConverter#TYPEKEY_SYNCGATEWAY_COMPATIBLE @@ -192,18 +195,19 @@ public abstract class AbstractCouchbaseConfiguration { * @throws Exception on Bean construction failure. */ @Bean - public CouchbaseMappingContext couchbaseMappingContext() throws Exception { + public CouchbaseMappingContext couchbaseMappingContext(CustomConversions customConversions) throws Exception { CouchbaseMappingContext mappingContext = new CouchbaseMappingContext(); mappingContext.setInitialEntitySet(getInitialEntitySet()); - mappingContext.setSimpleTypeHolder(customConversions().getSimpleTypeHolder()); + mappingContext.setSimpleTypeHolder(customConversions.getSimpleTypeHolder()); mappingContext.setFieldNamingStrategy(fieldNamingStrategy()); return mappingContext; } /** * Register custom Converters in a {@link CustomConversions} object if required. These {@link CustomConversions} will - * be registered with the {@link #mappingCouchbaseConverter(CouchbaseMappingContext)} )} and - * {@link #couchbaseMappingContext()}. Returns an empty {@link CustomConversions} instance by default. + * be registered with the {@link #mappingCouchbaseConverter(CouchbaseMappingContext, CouchbaseCustomConversions)} )} + * and {@link #couchbaseMappingContext(CustomConversions)}. Returns an empty {@link CustomConversions} instance by + * default. * * @return must not be {@literal null}. */ diff --git a/src/main/java/org/springframework/data/couchbase/config/CouchbaseConfigurer.java b/src/main/java/org/springframework/data/couchbase/config/CouchbaseConfigurer.java new file mode 100644 index 00000000..281fc01b --- /dev/null +++ b/src/main/java/org/springframework/data/couchbase/config/CouchbaseConfigurer.java @@ -0,0 +1,48 @@ +/* + * Copyright 2012-2020 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.data.couchbase.config; + +import com.couchbase.client.java.env.ClusterEnvironment; +import org.springframework.data.couchbase.CouchbaseClientFactory; + +/** + * Strategy interface for users to provide as a factory for custom components needed + * by the Couchbase integration. + * + * This allows to centralize instantiation of Couchbase SDK core elements. + * + * @author Stephane Nicoll + * @author Michael Nitschinger + */ +public interface CouchbaseConfigurer { + + /** + * Set up the underlying main {@link ClusterEnvironment}, allowing tuning of the Couchbase SDK. + * + * @throws Exception in case of error during the ClusterEnvironment instantiation. + */ + ClusterEnvironment clusterEnvironment() throws Exception; + + /** + * Set up the underlying main {@link CouchbaseClientFactory} reference to be used by the Spring Data framework + * when storing into Couchbase. + * + * @throws Exception in case of error during the CouchbaseClientFactory instantiation. + */ + CouchbaseClientFactory couchbaseClientFactory(ClusterEnvironment clusterEnvironment) throws Exception; + +}