Как добавить 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
3 ответа
Spring Boot не предлагает конфигурацию всех свойств. Вы можете определить ClusterBuilderCustomizer
боб, чтобы настроить Cluster
экземпляров.
Попробуйте следующий код, чтобы объявить компонент настройки, который получает внедренные свойства, которые могут быть предоставлены через файл свойств (в общем, любой источник свойств, доступный для 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 (например, автозаполнение имени свойства).
Шаг № 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
В соответствии с Spring Boot примечаниями к выпуску2.3.0 ClusterBuilderCustomizer был заменен на DriverConfigLoaderBuilderCustomizer и CqlSessionBuilderCustomizer. Как сказано в anwser , вам просто нужно объявить два bean-компонента с этими типами:
@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));
}
}