首页 > 解决方案 > Cassandra QueryLogger 引入 NoHostAvailableException

问题描述

我有一个 Spring Boot 应用程序,我使用了将 AbstractCassandraConfiguration 扩展为引导 Cassandra 的模式。这一切都很好。我现在想打开查询日志记录,所以我尝试实现这种模式:

https://github.com/spring-projects/spring-boot/issues/7312#issuecomment-358448437

为此,我将 AbstractCassandraConfiguration 实现更新为: 1. 成为 @Configuration 类 2. 添加 Bean QueryLogger Bean

但是在运行时,我开始收到 NoHostAvailableException。

由于之前和之后的代码很相似,所以我只是将其全部粘贴并指出新的破坏代码。

我能感觉到连接被破坏了,但也觉得我的模式太标准了,不知道发生了什么!!!任何提示表示赞赏。谢谢

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.cassandra.config.AbstractCassandraConfiguration;
import org.springframework.data.cassandra.config.SchemaAction;

import com.datastax.driver.core.AuthProvider;
import com.datastax.driver.core.Cluster;
import com.datastax.driver.core.PlainTextAuthProvider;
import com.datastax.driver.core.QueryLogger;

@Configuration   // **** NEW ****
public class CassandraConfig extends AbstractCassandraConfiguration {

  @Value("${spring.data.cassandra.contact-points:placeholder}")
  private String contactPoints;

  @Value("${spring.data.cassandra.port:0000}")
  private int port;

  @Value("${spring.data.cassandra.keyspace-name:placeholder}")
  private String keySpace;

  @Value("${spring.data.cassandra.username}")
  private String username;

  @Value("${spring.data.cassandra.password}")
  private String password;

  @Value("${spring.data.cassandra.schema-action}")
  private String schemaAction;

  // removed all the @Override getters for above props

 // **** NEW ****
 @Bean
 public QueryLogger queryLogger(Cluster cluster) {
    QueryLogger queryLogger = QueryLogger.builder().build();
    cluster.register(queryLogger);
    return queryLogger;
   }
 }

例外:

[dispatcherServlet] 在路径 [] 的上下文中抛出异常 [请求处理失败;嵌套异常是 org.springframework.data.cassandra.CassandraConnectionFailureException: Query; CQL [SELECT * FROM my_table;]; 尝试查询的所有主机都失败(尝试:cassandradb01.AAA.test.XXXX.com/10.18.51.15:9042(com.datastax.driver.core.exceptions.BusyPoolException:[cassandradb01.AAA.test.XXXX.com /10.18.51.15] 池正忙(没有可用连接并且在 5000 MILLISECONDS 后超时)));嵌套异常是 com.datastax.driver.core.exceptions.NoHostAvailableException:所有主机尝试查询失败(尝试:cassandradb01.AAA.test.XXXX.com/10.18.51.15:9042(com.datastax.driver.core .exceptions.BusyPoolException:[cassandradb01.AAA.test.XXXX.com/10.18.51。

标签: javaspring-bootcassandra

解决方案


推荐阅读