【问题标题】:How do I configure consistency level with Spring Boot and AWS Keyspaces?如何使用 Spring Boot 和 AWS Keyspaces 配置一致性级别?
【发布时间】:2022-11-18 06:07:57
【问题描述】:

我希望你能帮助我,我正在用 spring boot 和 keyspaces (cassandra aws) 做一个 crud,spring 的 Consistency level 默认级别为 ONE,自从出现以下错误后我无法写入数据:

"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",

我不知道如何配置一致性级别,我在互联网上尝试了多种解决方案,但没有一个对我有用。

我有以下代码

@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);
    }
}

【问题讨论】:

    标签: spring-boot cassandra amazon-keyspaces


    【解决方案1】:

    有几种方法可以配置一致性级别。您可以在 application.conf 文件中定义默认一致性:

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

    您也可以在使用InsertOptionsUpdateOptions时配置它。例如:

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

    您还可以使用 @Consistency 注释,例如:

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

    最后与QueryOptions

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

    【讨论】:

      【解决方案2】:

      这是 Spring Boot 和 Amazon Keyspaces 的示例

      https://github.com/aws-samples/amazon-keyspaces-examples/tree/main/java/datastax-v4/spring

      package com.example.demo;
      
      import com.datastax.oss.driver.api.core.CqlSession;
      import org.springframework.beans.factory.annotation.Autowired;
      import org.springframework.boot.CommandLineRunner;
      import org.springframework.boot.SpringApplication;
      import org.springframework.boot.autoconfigure.SpringBootApplication;
      import org.springframework.data.cassandra.core.CassandraOperations;
      import org.springframework.data.cassandra.core.cql.CqlTemplate;
      import org.springframework.data.cassandra.repository.config.EnableCassandraRepositories;
      
      
      @SpringBootApplication
      @EnableCassandraRepositories(basePackages="com.example.model")
      public class DemoApplication implements CommandLineRunner {
      
      
          @Autowired
          private CassandraOperations cassandraTemplate;
      
          public static void main(String[] args) {
      
              SpringApplication.run(DemoApplication.class, args);
      
          }
      
          @Override
          public void run(String... args) throws Exception {
      
              CqlTemplate cqlTemplate = (CqlTemplate) cassandraTemplate.getCqlOperations();
      
              CqlSession session = cqlTemplate.getSession();
      
              int count = session.execute ("SELECT * FROM system.peers").all().size();
      
              System.out.println("Number of hosts: "+  count);
      
              
          }
      
      
      
      }
      

      【讨论】:

      猜你喜欢
      • 2017-08-07
      • 2020-07-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-24
      • 2015-04-06
      • 1970-01-01
      相关资源
      最近更新 更多