Cassandra – это распределенная система управления базами данных с открытым исходным кодом, предназначенная для обработки больших объемов данных на множестве типовых серверов. В добавок Spring Boot предусматривает автоконфигурацию для Cassandra и абстракции, предоставляемые через Spring Data Cassandra. Для удобного сбора зависимостей существует "стартер" spring-boot-starter-data-cassandra.

Подключение к Cassandra

Можно внедрить автоконфигурируемый CassandraTemplate или экземпляр CqlSession из Cassandra так же, как и любой другой бин Spring. Свойства spring.data.cassandra.* можно использовать для настройки соединения. Как правило, указывается keyspace-name и contact-points, а также имя локального центра данных, как показано в следующем примере:

Properties
spring.data.cassandra.keyspace-name=mykeyspace
spring.data.cassandra.contact-points=cassandrahost1:9042,cassandrahost2:9042
spring.data.cassandra.local-datacenter=datacenter1
Yaml
spring:
  data:
    cassandra:
      keyspace-name: "mykeyspace"
      contact-points: "cassandrahost1:9042,cassandrahost2:9042"
      local-datacenter: "datacenter1"

Если порт одинаков для всех контактных точек, можно воспользоваться сокращением и указать только имена хостов, как показано в следующем примере:

Properties
spring.data.cassandra.keyspace-name=mykeyspace
spring.data.cassandra.contact-points=cassandrahost1,cassandrahost2
spring.data.cassandra.local-datacenter=datacenter1
Yaml
spring:
  data:
    cassandra:
      keyspace-name: "mykeyspace"
      contact-points: "cassandrahost1,cassandrahost2"
      local-datacenter: "datacenter1"
Эти два примера идентичны, поскольку порт по умолчанию – 9042. Если нужно сконфигурировать порт, используйте spring.data.cassandra.port.

Драйвер для Cassandra имеет свою собственную конфигурационную инфраструктуру, которая загружает application.conf в корень classpath.

Spring Boot не осуществляет поиска такого файла по умолчанию, но может загружать его с помощью spring.data.cassandra.config. Если свойство одновременно присутствует в spring.data.cassandra.* и в конфигурационном файле, значение в spring.data.cassandra.* имеет более высокий уровень старшинства.

Для более глубокой настройки драйверов можно регистрировать произвольное количество бинов, реализующих DriverConfigLoaderBuilderCustomizer. CqlSession можно настроить с помощью бина типа CqlSessionBuilderCustomizer.

Если вы используете CqlSessionBuilder для создания нескольких бинов CqlSession, имейте в виду, что средство сборки является изменяемым, поэтому следует убедиться, что для каждой сессии внедряется новая копия.

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

Java
import org.springframework.data.cassandra.core.CassandraTemplate;
import org.springframework.stereotype.Component;
@Component
public class MyBean {
    private final CassandraTemplate template;
    public MyBean(CassandraTemplate template) {
        this.template = template;
    }
    // ...
    public long someMethod() {
        return this.template.count(User.class);
    }
}
Kotlin
import org.springframework.data.cassandra.core.CassandraTemplate
import org.springframework.stereotype.Component
@Component
class MyBean(private val template: CassandraTemplate) {
    // ...
    fun someMethod(): Long {
        return template.count(User::class.java)
    }
}

Если вы добавите свой собственный бин типа CassandraTemplate, помеченный аннотацией @Bean, он заменит шаблон по умолчанию.

Репозитории Spring Data Cassandra

Spring Data содержит средства поддержки репозиториев для Cassandra. В настоящее время они более ограничены, чем аналогичная поддержка репозиториев для JPA, рассмотренная ранее, и требует аннотирования методов поиска с помощью аннотации @Query.