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.* можно использовать для настройки соединения. Как правило, указывается строка подключения, имя пользователя и пароль, как это показано в следующем примере:

Properties
spring.couchbase.connection-string=couchbase://192.168.1.123
spring.couchbase.username=user
spring.couchbase.password=secret
Yaml
spring:
  couchbase:
    connection-string: "couchbase://192.168.1.123"
    username: "user"
    password: "secret"

Также можно настроить некоторые параметры ClusterEnvironment. Например, в следующей конфигурации изменяется параметр времени ожидания, используемый для открытия нового Bucket, а также активируется поддержка протокола SSL:

Properties
spring.couchbase.env.timeouts.connect=3s
spring.couchbase.env.ssl.key-store=/location/of/keystore.jks
spring.couchbase.env.ssl.key-store-password=secret
Yaml
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) задано имя:

Properties
spring.data.couchbase.bucket-name=my-bucket
Yaml
spring:
  data:
    couchbase:
      bucket-name: "my-bucket"

В следующих примерах показано, как внедрить бин CouchbaseTemplate:

Java
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();
    }
}
Kotlin
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. Например, можно настроить используемые преобразователи следующим образом:

Java
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()));
    }
}
Kotlin
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()))
    }
}