Spring boot Spring data cassandra-打开新通道时出错
我对Cassandra与spring数据的连接有问题。当Cassandra在本地运行时,我在连接方面没有问题,但是当我在k8s中使用外部Cassandra运行spring boot应用程序时,我被卡在警告上:Spring boot Spring data cassandra-打开新通道时出错,spring-boot,cassandra,spring-data-cassandra,Spring Boot,Cassandra,Spring Data Cassandra,我对Cassandra与spring数据的连接有问题。当Cassandra在本地运行时,我在连接方面没有问题,但是当我在k8s中使用外部Cassandra运行spring boot应用程序时,我被卡在警告上: 2020-07-24 10:26:32.398 WARN 6 --- [ s0-admin-0] c.d.o.d.internal.core.pool.ChannelPool : [s0|/127.0.0.1:9042] Error while opening new ch
2020-07-24 10:26:32.398 WARN 6 --- [ s0-admin-0] c.d.o.d.internal.core.pool.ChannelPool : [s0|/127.0.0.1:9042] Error while opening new channel (ConnectionInitException: [s0|connecting...] Protocol initialization request, step 1 (STARTUP {CQL_VERSION=3.0.0, DRIVER_NAME=DataStax Java driver for Apache Cassandra(R), DRIVER_VERSION=4.7.2, CLIENT_ID=9679ee85-ff39-45b6-8573-62a8d827ec9e}): failed to send request (java.nio.channels.ClosedChannelException))
我不明白为什么在日志中我有[s0 |/127.0.0.1:9042]
而不是我的联系人的IP
弹簧配置:
spring:
data:
cassandra:
keyspace-name: event_store
local-datacenter: datacenter1
contact-points: host1:9042,host2:9042
此外,此警告不会导致spring引导无法启动,但如果我在服务中查询,则我有错误:
{ error: "Query; CQL [com.datastax.oss.driver.internal.core.cql.DefaultSimpleStatement@9463dccc]; No node was available to execute the query; nested exception is com.datastax.oss.driver.api.core.NoNodeAvailableException: No node was available to execute the query" }
选项1:像这样测试您的yml文件。(您尝试过ip地址吗?) 选项2:在yml上创建新属性,而不是配置类
cassandra:
database:
keyspace-name: event_store
contact-points: host1, host2
port: 9042
username: cassandra
password: cassandra
@Configuration
public class CassandraConfig extends AbstractCassandraConfiguration {
@Value("${cassandra.database.keyspace-name}")
private String keySpace;
@Value("${cassandra.database.contact-points}")
private String contactPoints;
@Value("${cassandra.database.port}")
private int port;
@Value("${cassandra.database.username}")
private String userName;
@Value("${cassandra.database.password}")
private String password;
@Override
protected String getKeyspaceName() {
return keySpace;
}
@Bean
public CassandraMappingContext cassandraMapping() throws ClassNotFoundException {
CassandraMappingContext context = new CassandraMappingContext();
context.setUserTypeResolver(new SimpleUserTypeResolver(cluster().getObject(), keySpace));
return context;
}
@Bean
public CassandraClusterFactoryBean cluster() {
CassandraClusterFactoryBean cluster = super.cluster();
cluster.setUsername(userName);
cluster.setPassword(password);
cluster.setContactPoints(contactPoints);
cluster.setPort(port);
return cluster;
}
@Override
protected boolean getMetricsEnabled() {
return false;
}
}
cassandra:
database:
keyspace-name: event_store
contact-points: host1, host2
port: 9042
username: cassandra
password: cassandra
@Configuration
public class CassandraConfig extends AbstractCassandraConfiguration {
@Value("${cassandra.database.keyspace-name}")
private String keySpace;
@Value("${cassandra.database.contact-points}")
private String contactPoints;
@Value("${cassandra.database.port}")
private int port;
@Value("${cassandra.database.username}")
private String userName;
@Value("${cassandra.database.password}")
private String password;
@Override
protected String getKeyspaceName() {
return keySpace;
}
@Bean
public CassandraMappingContext cassandraMapping() throws ClassNotFoundException {
CassandraMappingContext context = new CassandraMappingContext();
context.setUserTypeResolver(new SimpleUserTypeResolver(cluster().getObject(), keySpace));
return context;
}
@Bean
public CassandraClusterFactoryBean cluster() {
CassandraClusterFactoryBean cluster = super.cluster();
cluster.setUsername(userName);
cluster.setPassword(password);
cluster.setContactPoints(contactPoints);
cluster.setPort(port);
return cluster;
}
@Override
protected boolean getMetricsEnabled() {
return false;
}
}