Java spring数据cassandra集一致性级别
我正在使用spring数据cassandra(1.3.1.RELEASE)连接到cassandra数据库。是否有办法更改spring数据cassandra中的一致性级别。 默认情况下,它是级别1()。但如何改变这一点呢Java spring数据cassandra集一致性级别,java,spring-data-cassandra,Java,Spring Data Cassandra,我正在使用spring数据cassandra(1.3.1.RELEASE)连接到cassandra数据库。是否有办法更改spring数据cassandra中的一致性级别。 默认情况下,它是级别1()。但如何改变这一点呢 谢谢大家! 这些是目前定义的一致性级别: 任何一个, 二,, 三,, 法定人数, 全部的 当地法定人数, 每一个法定人数, 电视连续剧 本地(u)连载,, 本地单台 如果您谈论的是使用除此之外的其他方法,我认为目前还没有一个可插拔的解决方案,您可以定义将参与维护所需一致性的节点数
谢谢大家! 这些是目前定义的一致性级别:
任何一个, 二,, 三,, 法定人数, 全部的 当地法定人数, 每一个法定人数, 电视连续剧 本地(u)连载,, 本地单台
如果您谈论的是使用除此之外的其他方法,我认为目前还没有一个可插拔的解决方案,您可以定义将参与维护所需一致性的节点数。
如果要使用上述任何定义的一致性,
例如:
Select s = QueryBuilder.select().from("employee");
s.where(QueryBuilder.eq("id", "234"));
s.setConsistencyLevel(ConsistencyLevel.QUORUM) ;
使用spring data cassandra的Crudepository接口时,无法设置自定义一致性级别。有一个悬而未决的问题。原因是实现接口方法的SimpleCassandRaposition调用CassandraOperations方法,而不使用WriteOptions参数
我的解决方案:我编写了一个自定义CRUDepository实现,在这个实现中,我可以自己设置一致性级别。一种可能性是在application.properties文件中设置它:
spring.data.cassandra.consistency level=LOCAL_QUORUM从
spring-data-cassandra
1.5版开始,一致性级别已经可以配置(请参见org.springframework.cassandra.core.QueryOptions#setconsistentylevel(org.springframework.cassandra.core.consistentylevel))
它可以通过org.springframework.cassandra.core.ckloperations#execute(java.lang.String,org.springframework.cassandra.core.QueryOptions)
为单个查询指定为QueryOptions的一部分,或者通过org.springframework.cassandra.core.cklemplate>为所有类型的查询指定为addQueryOptions
此外,还可以通过WriteOptions
设置一致性级别,然后将其传递给org.springframework.data.cassandra.core.CassandraOperations\insert(T,org.springframework.cassandra.core.WriteOptions)
您现在可以通过在application.properties文件中设置以下属性,在spring引导中设置此级别
spring.data.cassandra.consistency-level=quorum
spring.data.cassandra.serial-consistency-level=quorum
如果您不使用boot,并且希望全局设置,请尝试一下
@Configuration
public class CassandraConfig extends AbstractCassandraConfiguration {
...
@Override
protected QueryOptions getQueryOptions() {
QueryOptions queryOptions = new QueryOptions();
queryOptions.setConsistencyLevel(ConsistencyLevel.LOCAL_QUORUM);
return queryOptions;
}
文档说您可以将其设置为注释
在我看来,控制每个请求的一致性级别总是比控制每个应用程序的一致性级别更好。
存储库:
public interface PersonRepository extends CrudRepository<Person, String> {
@Consistency(ConsistencyLevel.LOCAL_ONE)
List<Person> findByLastname(String lastname);
List<Person> findByFirstname(String firstname, QueryOptions options);
}
我不知道你所说的“如果你不使用boot并且想在全局范围内设置此选项,请尝试一下”是什么意思
我用的是弹簧靴,这很管用`
@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`
好的,看起来还没有办法设置自定义的一致性级别:谢谢-也许我的问题不够清楚。我想使用定义的级别,但如果我使用Crudepository接口,也要使用。因此,当我构建一个扩展crudepository接口的自定义存储库并调用save(T)方法时,我将设置一致性级别。但看起来没有办法做到这一点()。原因是实现接口方法的SimpleCassandRaposition调用了CassandraOperations方法,而没有WriteOptions参数。Ok。如果您可以编写解决方案作为答案并接受它,这样问题就可以结束了。您知道是哪个版本添加了这个问题吗?这个问题还是解决了?我还想在spring data casasandra中设置自定义一致性级别
@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`