Couchbase – это документоориентированная распределенная многомодельная база данных NoSQL с открытым исходным кодом, оптимизированная для интерактивных приложений. В добавок Spring Boot предусматривает автоконфигурацию для Couchbase и абстракции, предоставляемые через Spring Data Couchbase. Для удобного сбора зависимостей существуют "стартовые пакеты" spring-boot-starter-data-couchbase и spring-boot-starter-data-couchbase-reactive
Подключение к Couchbase
Можно получить Cluster, добавив Couchbase SDK и определенную конфигурацию. Свойства spring.couchbase.* можно использовать для настройки соединения. Как правило, указывается строка подключения, имя пользователя и пароль, как это показано в следующем примере:
spring.couchbase.connection-string=couchbase://192.168.1.123
spring.couchbase.username=user
spring.couchbase.password=secret
spring:
couchbase:
connection-string: "couchbase://192.168.1.123"
username: "user"
password: "secret"
Также можно настроить некоторые параметры ClusterEnvironment. Например, в следующей конфигурации изменяется параметр времени ожидания, используемый для открытия нового Bucket, а также активируется поддержка протокола SSL:
spring.couchbase.env.timeouts.connect=3s
spring.couchbase.env.ssl.key-store=/location/of/keystore.jks
spring.couchbase.env.ssl.key-store-password=secret
spring:
couchbase:
env:
timeouts:
connect: "3s"
ssl:
key-store: "/location/of/keystore.jks"
key-store-password: "secret"
spring.couchbase.env.* для получения более подробной информации. Чтобы получить больше контроля, можно использовать один или несколько бинов
ClusterEnvironmentBuilderCustomizer.
Репозитории Spring Data Couchbase
Spring Data содержит средства поддержки репозиториев для Couchbase.
Автоконфигурируемый экземпляр CouchbaseTemplate можно внедрять так же, как и любой другой бин Spring, при условии наличия бина CouchbaseClientFactory. Это возможно, если имеется описанный выше Cluster, а для бакета (bucket) задано имя:
spring.data.couchbase.bucket-name=my-bucket
spring:
data:
couchbase:
bucket-name: "my-bucket"
В следующих примерах показано, как внедрить бин CouchbaseTemplate:
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; } // ... public String someMethod() { return this.template.getBucketName(); } }
import org.springframework.data.couchbase.core.CouchbaseTemplate import org.springframework.stereotype.Component @Component class MyBean(private val template: CouchbaseTemplate) { // ... fun someMethod(): String { return template.bucketName } }
Есть несколько бинов, которые можно определить в собственной конфигурации, чтобы отменить те, которые предусмотрены автоконфигурацией:
-
Бин
CouchbaseMappingContext, помеченный аннотацией@Bean, с именемcouchbaseMappingContext. -
Бин
CustomConversions, помеченный аннотацией@Bean, с именемcouchbaseCustomConversions. -
Бин
CouchbaseTemplate, помеченный аннотацией@Bean, с именемcouchbaseTemplate.
Чтобы избежать жесткого кодирования этих имен в собственной конфигурации, можно использовать BeanNames, предусмотренные Spring Data Couchbase. Например, можно настроить используемые преобразователи следующим образом:
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())); } }
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) class MyCouchbaseConfiguration { @Bean(BeanNames.COUCHBASE_CUSTOM_CONVERSIONS) fun myCustomConversions(): CouchbaseCustomConversions { return CouchbaseCustomConversions(Arrays.asList(MyConverter())) } }