How do I configure consistency level with Spring Boot and AWS Keyspaces?

Viewed 48

I hope you can help me, I am doing a crud with spring boot and keyspaces (cassandra aws), spring has the default level of Consistency level in ONE and I have not been able to write the data since I get the following error:

"message": "Query; CQL [INSERT INTO tabledemoach (address,ciiu,creation_date,email,id,name,phone,state,user_activation_status) VALUES (?,?,?,?,?,?,?,?,?)]; Consistency level LOCAL_ONE is not supported for this operation. Supported consistency levels are: LOCAL_QUORUM; nested exception is com.datastax.oss.driver.api.core.servererrors.InvalidQueryException: Consistency level LOCAL_ONE is not supported for this operation. Supported consistency levels are: LOCAL_QUORUM",

I don't know how to configure the consistency level, I have tried several solutions on the internet and none have worked for me.

i have the following code

@Configuration
@EnableCassandraRepositories(basePackages = "com.demo")
public class AppConfig {

private final static String KEYSPACE = "demo";

@Primary
public @Bean CqlSession session() {
    return CqlSession.builder().withKeyspace(KEYSPACE).build();
}

}


@Table(value = "tabledemoach")
@Data
public class User {

@PrimaryKey
private int id;
private String phone;
private String name;
private String address;
private String email;
private int ciiu;
private String state;
private String user_activation_status;
private LocalDate creation_date;
} 


    @Override
    public void createUser(User user) {
    List<User> userFind = (List<User>) userRepository.findAll();

    var userList =userFind.stream().map(x -> x.getPhone());
    var repeated = (userList.filter(x -> 
    x.contains(user.getPhone()))).collect(Collectors.toList());

    if(repeated.size() <= 0){
        userRepository.save(user);
    }
}
1 Answers

There are several ways to configure the consistency level. You can define the default consistency in an application.conf file with:

datastax-java-driver {
  basic {
    request {
      consistency = LOCAL_QUORUM
    }
  }
}

You can also configure it when using InsertOptions and UpdateOptions. For example:

InsertOptions insertOptions = 
    org.springframework.data.cassandra.core.InsertOptions.builder()
        .consistencyLevel(ConsistencyLevel.LOCAL_QUORUM)
        .build();

You can also use the @Consistency annotation, for example:

    @Consistency(ConsistencyLevel.LOCAL_QUORUM)
    List<Person> findByLastname(String lastname);

Finally with QueryOptions:

QueryOptions queryOptions = 
    newQueryOptions.setConsistencyLevel(ConsistencyLevel.LOCAL_QUORUM);
Related