spring-data-cassandra设置一致性级别

时间:2015-11-25 16:01:23

标签: java spring-data-cassandra

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

谢谢!

8 个答案:

答案 0 :(得分:5)

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

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

答案 1 :(得分:2)

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

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

答案 2 :(得分:1)

这些是目前定义的一致性级别:
  ANY,ONE,     两个,     三,     QUORUM,     全部,     LOCAL_QUORUM,     EACH_QUORUM,     SERIAL,     LOCAL_SERIAL,     LOCAL_ONE
如果您正在谈论使用除此之外的其他内容,我现在不认为有可插拔的解决方案,您可以在其中定义将参与的节点数量以确定所需的一致性。
如果您想使用上面定义的任何一致性,
一个例子是:

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

答案 3 :(得分:1)

如果您没有使用启动并想要全局设置,请试一试

@Configuration
public class CassandraConfig extends AbstractCassandraConfiguration {
...
@Override
protected QueryOptions getQueryOptions() {
    QueryOptions queryOptions = new QueryOptions();
    queryOptions.setConsistencyLevel(ConsistencyLevel.LOCAL_QUORUM);
    return queryOptions;
}

答案 4 :(得分:1)

文档说您可以将其设置为注释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);
}

CassandraTemplate:

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

答案 5 :(得分:1)

我不确定“如果您不使用启动并想在全局范围内进行设置,请尝试一下”是什么意思。 我用了弹簧靴,这行得通。

@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 :(得分:0)

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

答案 7 :(得分:0)

spring-data-cassandra 版本1.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)