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()))
}
}