gpt4 book ai didi

java - Spring Boot 2.3.1.Release 和 Cassandra DriverTimeout 问题

转载 作者:行者123 更新时间:2023-12-05 07:03:01 28 4
gpt4 key购买 nike

我正在升级到 Spring boot 版本 2.3.1.Release。因此,由于 Java 驱动程序版本升级到 v4,Spring Data Cassandra 发生了重大变化。我在应用程序启动时卡住了,因为抛出了 DriverTimeout 异常:

 com.datastax.oss.driver.api.core.DriverTimeoutException: [s0|control|id: 0x8572a9d7, L:/My_IPv4:Random_Port - R:/Cassandra_Server:Port] Protocol initialization request, step 1 (OPTIONS): timed out after 500 ms

我的 Cassandra 配置:

    @Bean(name = "mySession")
@Primary
public CqlSession session() {

String containerIpAddress = getContactPoints();
int containerPort = getPort();
InetSocketAddress containerEndPoint = new InetSocketAddress(containerIpAddress, containerPort);

return CqlSession.builder().withLocalDatacenter(getLocalDataCenter())
.addContactPoint(containerEndPoint)
.withAuthCredentials(dbProperties.getCassandraUserName(), dbProperties.getCassandraPassword())
.withKeyspace(getKeyspaceName()).build();
}

我还尝试通过显式设置连接超时来使用 DriverConfigLoader 选项:

     @Bean(name = "mySession")
@Primary
public CqlSession session() {

String containerIpAddress = getContactPoints();
int containerPort = getPort();
InetSocketAddress containerEndPoint = new InetSocketAddress(containerIpAddress, containerPort);

DriverConfigLoader loader =
DriverConfigLoader.programmaticBuilder()
.withDuration(DefaultDriverOption.CONNECTION_CONNECT_TIMEOUT, Duration.ofSeconds(5))
.build();

return CqlSession.builder().withLocalDatacenter(getLocalDataCenter())
.withConfigLoader(loader)
.addContactPoint(containerEndPoint)
.withAuthCredentials(dbProperties.getCassandraUserName(), dbProperties.getCassandraPassword())
.withKeyspace(getKeyspaceName()).build();
}

,但无济于事,并抛出相同的异常。我当前的 Spring 引导版本是 2.2.0.Release,我什至没有在那里指定任何超时并且它工作正常。如何解决此问题?

最佳答案

假设您使用的是 spring-data-cassandra。您可以完全通过您的应用程序属性对其进行配置。

或者,您可以按照您要走的路线构建自己的 session 。如果您这样做,您可能需要关闭 Spring 的自动配置。

@EnableAutoConfiguration(exclude = {
CassandraDataAutoConfiguration.class })

然后不构建 CqlSession,而是像这样使用 CqlSessionFactory:

  @Primary
@Bean("mySessionFactory")
public CqlSessionFactoryBean getCqlSession() {
CqlSessionFactoryBean factory = new CqlSessionFactoryBean();
factory.setUsername(userName);
factory.setPassword(password);
factory.setPort(port);
factory.setKeyspaceName(keyspaceName);
factory.setContactPoints(hostList);
factory.setLocalDatacenter(datacenter);
return factory;
}

关于java - Spring Boot 2.3.1.Release 和 Cassandra DriverTimeout 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63378497/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com