Saman Sarem
Saman Sarem

Reputation: 86

Springboot 3 reactive cassandra keyspace DataStax config try to connect localhost

I'm trying to connect to amazon-keyspace AWS Casandra via my spring-boot-3 multi-module software but it tries to connect localhost / endPoint=/127.0.0.1:9042 instead.

Here is some of my build gradle

plugins {
    java
    id("org.springframework.boot") version "3.0.1" apply false
    id("io.spring.dependency-management") version "1.1.0"
    id("io.freefair.lombok") version "6.6.1"
}
java.sourceCompatibility = JavaVersion.VERSION_17
dependencies {
implementation("org.springframework.boot:spring-boot-starter-data-cassandra-reactive")
implementation("software.aws.mcs:aws-sigv4-auth-cassandra-java-driver-plugin:4.0.8")
...
}

I tried different application.yml file and add and remove some settings to see difference.

#new settings
spring:
cassandra:
  keyspace-name: my-existing-keyspace
  schema-action: none
  config: keyspaces-application.conf
  local-datacenter: eu-north-1
  contact-points: cassandra.eu-north-1.amazonaws.com:9142
#Deprecated one
spring:
  data:
    cassandra:
      keyspace-name: my-existing-keyspace
      schema-action: none
      config: keyspaces-application.conf
      local-datacenter: eu-north-1
      contact-points: cassandra.eu-north-1.amazonaws.com:9142

And here it is my keyspaces-application.conf :

datastax-java-driver {

    basic.contact-points = [ "cassandra.eu-north-1.amazonaws.com:9142"]
    advanced.auth-provider{
        class = PlainTextAuthProvider
        username = "my existing username"
        password = "my existing password"
    }
    basic.load-balancing-policy {
        local-datacenter = "eu-north-1"
        slow-replica-avoidance = false           
    }

    advanced.ssl-engine-factory {
        class = DefaultSslEngineFactory
        truststore-path = "/home/ec2-user/cassandra_truststore.jks"
        truststore-password = "my-truststore-password"
        hostname-validation = false
      }
}

But it tries to connect localhost 1, and here it is some logs:

Error connecting to Node(endPoint=/127.0.0.1:9042, hostId=null, hashCode=3d061dd6), trying next node (ConnectionInitException: [s0|control|connecting...] Protocol initialization request, step 1 (OPTIONS): failed to send request
(io.netty.channel.StacklessClosedChannelException))
WARN 24461 --- [ main]
onfigReactiveWebServerApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'myRepositoryImpl' defined in URL [jar:file:/home/ec2-user/my-service/my-container/build/libs/my-container-0.0.1-SNAPSHOT.jar!/BOOT-INF/lib/my-dataaccess-0.0.1-SNAPSHOT.jar!/com/anything/MyRepositoryImpl.class]: Unsatisfied dependency expressed through constructor parameter 0: Error creating bean with name 'myCasandraRepository' defined in ******.MyRepository defined in @EnableReactiveCassandraRepositories declared on ContainerApplication: Cannot resolve reference to bean 'reactiveCassandraTemplate' while setting bean property 'reactiveCassandraOperations'

Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'reactiveCassandraTemplate' defined in class path resource [org/springframework/boot/autoconfigure/data/cassandra/CassandraReactiveDataAutoConfiguration.class]: Unsatisfied dependency expressed through method 'reactiveCassandraTemplate' parameter 0: Error creating bean with name 'reactiveCassandraSession' defined in class path resource [org/springframework/boot/autoconfigure/data/cassandra/CassandraReactiveDataAutoConfiguration.class]: Unsatisfied dependency expressed through method 'reactiveCassandraSession' parameter 0: Error creating bean with name 'cassandraSession' defined in class path resource [org/springframework/boot/autoconfigure/cassandra/CassandraAutoConfiguration.class]: Failed to instantiate [com.datastax.oss.driver.api.core.CqlSession]: Factory method 'cassandraSession' threw exception with message: Could not reach any contact point, make sure you've provided valid addresses (showing first 1 nodes, use getAllError

Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'cassandraSession' defined in class path resource [org/springframework/boot/autoconfigure/cassandra/CassandraAutoConfiguration.class]: Failed to instantiate [com.datastax.oss.driver.api.core.CqlSession]: Factory method 'cassandraSession' threw exception with message: Could not reach any contact point, make sure you've provided valid addresses (showing first 1 nodes, use getAllErrors() for more): Node(endPoint=/127.0.0.1:9042, hostId=null, hashCode=3d061dd6): [com.datastax.oss.driver.api.core.connection.ConnectionInitException: [s0|control|connecting...] Protocol initialization request, step 1 (OPTIONS): failed to send request (io.netty.channel.StacklessClosedChannelException)]

I am trying to connect amazon-keyspace aws casandra via spring boot 3 application and datastax-v4, but it try to connect to localhost endPoint=/127.0.0.1:9042.

It is possible I missed a config or may some config changed for spring boot 3 or need some changes for reactive settings

Upvotes: 2

Views: 538

Answers (1)

ozkanpakdil
ozkanpakdil

Reputation: 4612

Correct configuration is

spring.cassandra.contact-points=host:port

I see you have

spring:
cassandra:
  keyspace-name: my-existing-keyspace
  schema-action: none
  config: keyspaces-application.conf
  local-datacenter: eu-north-1
  contact-points: cassandra.eu-north-1.amazonaws.com:9142

you are having indentation problem. It should have been like below

spring:
  cassandra:
    keyspace-name: my-existing-keyspace
    schema-action: none
    config: keyspaces-application.conf
    local-datacenter: eu-north-1
    contact-points: cassandra.eu-north-1.amazonaws.com:9142

if you do not give that tab character, configuration goes back to default 127.0.0.1:9042 and does not throw any exception.

If you did not see at your first read, below is the problem indentation is missing here

Upvotes: 1

Related Questions