Java 弹簧靴2.3.1.释放和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

我正在升级到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 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;
  }

你的问题解决了吗?