Spring boot Spring data cassandra-打开新通道时出错

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

我对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 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;
    } 
    
}