Java 弹簧靴2.3.1.释放和Cassandra DriverTimeout问题
我正在升级到Spring boot版本2.3.1.0。因此,由于Java驱动程序版本升级到v4,Spring数据Cassandra发生了重大变化。我无法启动应用程序,因为引发了DriverTimeout异常:Java 弹簧靴2.3.1.释放和Cassandra DriverTimeout问题,java,spring-boot,datastax-java-driver,spring-data-cassandra,Java,Spring Boot,Datastax Java Driver,Spring Data Cassandra,我正在升级到Spring boot版本2.3.1.0。因此,由于Java驱动程序版本升级到v4,Spring数据Cassandra发生了重大变化。我无法启动应用程序,因为引发了DriverTimeout异常: com.datastax.oss.driver.api.core.DriverTimeoutException: [s0|control|id: 0x8572a9d7, L:/My_IPv4:Random_Port - R:/Cassandra_Server:Port] Protocol
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
我的卡桑德拉配置:
@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数据cassandra。您可以完全通过应用程序属性对其进行配置 或者,您可以选择您要走的路线,构建自己的会话。如果这样做,您可能需要关闭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;
}
你的问题解决了吗?