Как добавить Cassandra MaxRequestsPerConnection, используя файл свойств при загрузке Spring

У меня есть загрузочный проект Spring, в котором я использую Cassandra в качестве базы данных.

В настоящее время я получаю экземпляр Cassandra путем автоматического подключения CassandraOperations.

Мой вопрос:

Как мы можем установить MaxRequestsPerConnection с помощью файла свойств?

# spring.data.cassandra.keyspace-name=event
# spring.data.cassandra.contact-points=localhost
# spring.data.cassandra.port=9042

В настоящее время у меня есть эти свойства в моем файле свойств, но я не нашел никакого свойства для установки MaxRequestsPerConnection


person Prakash Pandey    schedule 18.07.2017    source источник


Ответы (3)


Spring Boot не предлагает настройку всех свойств. Вы можете определить ClusterBuilderCustomizer компонент для настройки Cluster экземпляров.

Попробуйте следующий код, чтобы объявить bean-компонент настройщика, который получает внедренные свойства, которые могут быть предоставлены через файл свойств (в более общем смысле, любой источник свойств, доступный для Spring Boot):

@Configuration
public class MyConfiguration {

    @Bean
    ClusterBuilderCustomizer clusterBuilderCustomizer(
            @Value("${spring.data.cassandra.pool.max-requests-local:10}") int local,
            @Value("${spring.data.cassandra.pool.max-requests-remote:5}") int remote) {

        PoolingOptions options = new PoolingOptions();

        options.setMaxRequestsPerConnection(HostDistance.LOCAL, local);
        options.setMaxRequestsPerConnection(HostDistance.REMOTE, remote);

        return builder -> builder.withPoolingOptions(options);
    }
}

Альтернативой @Value является использование класса конфигурации (с аннотацией @ConfigurationProperties, что дает вам поддержку IDE (например, автозаполнение имени свойства).

person mp911de    schedule 18.07.2017
comment
Я наткнулся на этот вопрос, теперь задаюсь вопросом, что происходит в операторе return. Я вижу, что ClusterBuilderCustomizer — это FunctionalInterface, имеющий единственный метод, который принимает com.datastax.driver.core.Cluster.Builder в качестве входных данных. Я понятия не имею, где строитель появляется в операторе возврата и что делает лямбда, единственная идея, которую я имею, заключается в том, что это связано с типом возврата метода... - person hecko84; 03.02.2020

Шаг №: 1 В файле application.properties мы должны объявить размер локального и удаленного пула (необходимое значение размера)

# spring.data.cassandra.keyspace-name=event
# spring.data.cassandra.contact-points=localhost
# spring.data.cassandra.port=9042
# spring.data.cassandra.pool.max-requests-local:20
# spring.data.cassandra.pool.max-requests-remote:10

Шаг №:2

в конфигурации бина:

@Bean ClusterBuilderCustomizer, пожалуйста, получите значения, используя следующий код (используя аннотацию @value):

 @Value("${spring.data.cassandra.pool.max-requests-local}")
  private int localPool;

  @Value("${spring.data.cassandra.pool.max-requests-remote}")
  private int remotePool;

Используя этот класс PoolingOptions, установите setMaxRequestsPerConnections для локальных и удаленных

HostDistance.LOCAL -- localPool
HostDistance.REMOTE -- remotePool
person Lova Chittumuri    schedule 19.07.2017

Согласно Spring Boot 2.3. 0, ClusterBuilderCustomizer был заменен на DriverConfigLoaderBuilderCustomizer и CqlSessionBuilderCustomizer. Как сказано в anwser, вам просто нужно объявить два компонента, имеющих эти типы:

@Bean
public CqlSessionBuilderCustomizer cqlSessionBuilderCustomizer() {
    return cqlSessionBuilder -> cqlSessionBuilder
            .withNodeStateListener(new MyNodeStateListener())
            .withSchemaChangeListener(new MySchemChangeListener());
}

@Bean
public DriverConfigLoaderBuilderCustomizer driverConfigLoaderBuilderCustomizer() {
    return loaderBuilder -> loaderBuilder
            .withDuration(DefaultDriverOption.REQUEST_TIMEOUT, Duration.ofSeconds(10));
    }
}
person V-Q-A NGUYEN    schedule 10.05.2021