【问题标题】:spring-data-cassandra set consistency levelspring-data-cassandra 设置一致性级别
【发布时间】:2018-08-16 22:57:48
【问题描述】:

我正在使用 spring-data-cassandra (1.3.1.RELEASE) 连接到 cassandra 数据库。有没有办法改变 spring-data-cassandra 中的一致性级别。 默认情况下,它是级别 1 (What is the default consistency level in spring-data-cassandra?)。但是如何改变呢?

谢谢!

【问题讨论】:

标签: java spring-data-cassandra


【解决方案1】:

您现在可以通过在 application.properties 文件中设置以下属性来在 Spring Boot 中设置此级别。

spring.data.cassandra.consistency-level=quorum
spring.data.cassandra.serial-consistency-level=quorum

【讨论】:

  • 你知道是哪个版本添加了这个吗?
【解决方案2】:

使用 spring-data-cassandra 的 CrudRepository 接口时无法设置自定义一致性级别。有一个未解决的问题https://jira.spring.io/browse/DATACASS-14。原因是实现接口方法的 SimpleCassandraRepository 调用了没有 WriteOptions 参数的 CassandraOperations 方法。

我的解决方案:我编写了一个自定义 crudrepository 实现,在此我可以自行设置一致性级别。

【讨论】:

  • 这个问题还是解决了吗?,我还想在 spring-data-casasandra 中设置自定义一致性级别
【解决方案3】:

文档说您可以将其设置为注释 https://docs.spring.io/spring-data/cassandra/docs/current/reference/html/#cassandra.repositories.queries.options

IMO,控制每个请求而不是每个应用程序的一致性级别总是更好。 存储库:

public interface PersonRepository extends CrudRepository<Person, String> {

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

    List<Person> findByFirstname(String firstname, QueryOptions options);
}

Cassandra 模板:

cassandraTemplate.insert(myEntity, new WriteOptions().builder()
                    .consistencyLevel(ConsistencyLevel.QUORUM).build())

【讨论】:

    【解决方案4】:

    这些是现在定义的一致性级别:
    ANY、ONE、 二 , 三 , 法定人数, 全部 , LOCAL_QUORUM, EACH_QUORUM , 串行, 本地序列号, LOCAL_ONE .
    如果您正在谈论使用除这些之外的其他方法,我认为目前还没有可插入的解决方案,您可以在其中定义将参与断言所需一致性的节点数量。
    如果您想使用上述任何定义的一致性,
    一个例子是:

            Select s = QueryBuilder.select().from("employee");
            s.where(QueryBuilder.eq("id", "234"));
            s.setConsistencyLevel(ConsistencyLevel.QUORUM) ;
    

    【讨论】:

    • 谢谢 - 也许我的问题不够清楚。我想使用定义的级别,但如果我使用 CrudRepository 接口。因此,当我构建一个扩展 CrudRepository 接口的自定义存储库并调用例如方法 save(T) 时,我将设置一致性级别。但看起来没有办法做到这一点(jira.spring.io/browse/DATACASS-145)。原因是实现接口方法的 SimpleCassandraRepository 调用了没有 WriteOptions 参数的 CassandraOperations 方法。
    • 好的。如果您可以将解决方案写成答案并接受它,那就更好了,这样问题就可以结束了。
    【解决方案5】:

    我不确定“如果您不使用引导并且想要全局设置,请试一试”是什么意思 我使用了弹簧靴,这很有效`

    @Configuration     
    public class CassandraConfig extends AbstractCassandraConfiguration {
    
    
    
    
    @Override
    public QueryOptions getQueryOptions() {
        QueryOptions queryOptions = new QueryOptions();
        queryOptions.setConsistencyLevel(ConsistencyLevel.TWO);
        return queryOptions;
    }
    
    @Override
    protected String getKeyspaceName() {
        return keyspaceName;
    }
    
    @Override
    public CassandraCqlClusterFactoryBean cluster() {
        CassandraCqlClusterFactoryBean cluster = super.cluster();
        cluster.setContactPoints(contactPoints);
        cluster.setPort(port);
        cluster.setUsername(username);
        cluster.setPassword(password);
        return cluster;
    }
    //Also added @Import to Main class
    
    @Import(CassandraConfig.class)
    @EnableJpaRepositories(basePackageClasses = Vexxxxxxy.class)
    @EnableCassandraRepositories(basePackageClasses = Txxxxxry.class)
    @EntityScan(basePackageClasses = { Entity.class, Vxxxxity.class })
    @SpringBootApplication(scanBasePackages = "com.xx.xxx")
    public class DrixxxxxxxxMain`
    

    【讨论】:

      【解决方案6】:

      一种可能性是在 application.properties 文件中设置它: spring.data.cassandra.consistency-level=LOCAL_QUORUM

      【讨论】:

        【解决方案7】:

        截至spring-data-cassandra1.5 版,一致性级别已经是可配置的(参见org.springframework.cassandra.core.QueryOptions#setConsistencyLevel(org.springframework.cassandra.core.ConsistencyLevel))

        它可以被指定为QueryOptions 的一部分,通过org.springframework.cassandra.core.CqlOperations#execute(java.lang.String, org.springframework.cassandra.core.QueryOptions) 用于单个查询,或通过org.springframework.cassandra.core.CqlTemplate#addQueryOptions 用于所有类型的查询

        还可以通过WriteOptions 设置一致性级别,然后将它们传递给org.springframework.data.cassandra.core.CassandraOperations#insert(T, org.springframework.cassandra.core.WriteOptions)

        【讨论】:

          猜你喜欢
          • 2017-08-07
          • 1970-01-01
          • 2017-05-06
          • 1970-01-01
          • 2014-09-23
          • 1970-01-01
          • 2018-07-12
          • 2016-07-05
          • 1970-01-01
          相关资源
          最近更新 更多