Couchbase — це документоорієнтована розподілена багатомодельна база даних NoSQL з відкритим вихідним кодом, оптимізована для інтерактивних програм. На додаток Spring Boot передбачає автоконфігурацію для 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()))
    }
}