如何在JavaSpring数据Cassandra反应式库中基于查询设置一致性级别
我正在使用Java中的Spring数据Cassandra反应库,并使用ReactiveCqlTemplate查询Scyllab 在应用程序级别,我们可以通过在application.properties文件中指定如下属性来设置 spring.data.cassandra.consistency level=quorum 我的问题是如何使用ReactiveCqlTemplate在每个查询级别上指定一致性级别?我正在使用ReactiveCqlTemplate查询我的“锡拉数据库”。代码示例如下所示:如何在JavaSpring数据Cassandra反应式库中基于查询设置一致性级别,java,spring,cassandra,spring-webflux,Java,Spring,Cassandra,Spring Webflux,我正在使用Java中的Spring数据Cassandra反应库,并使用ReactiveCqlTemplate查询Scyllab 在应用程序级别,我们可以通过在application.properties文件中指定如下属性来设置 spring.data.cassandra.consistency level=quorum 我的问题是如何使用ReactiveCqlTemplate在每个查询级别上指定一致性级别?我正在使用ReactiveCqlTemplate查询我的“锡拉数据库”。代码示例如下所示:
@Autowired
private ReactiveCqlTemplate template;
@Override
public Mono<Template> findTemplate(Channel channel, String id) {
String query = "select * from task where id = ? and channel = ?";
return template.queryForObject(query, new RowMapper<Template>() {
public Template mapRow(Row row, int rowNum) {
Template template = new Template();
template.setContent(row.getString("content"));
template.setMessageType(row.getString("message_type"));
template.setSource(row.getString("source"));
template.setSubject(row.getString("subject"));
template.setTemplateKey(new TemplateKey(row.getString("id"), Channel.fromString(row.getString(("channel")))));
return template;
}}, UUID.fromString(id), channel.toString());
}
@Autowired
私有反应CqlTemplate模板;
@凌驾
公共Mono findTemplate(通道,字符串id){
String query=“从任务中选择*,其中id=?和通道=?”;
返回template.queryForObject(查询,新的行映射器(){
公共模板mapRow(Row-Row,int-rowNum){
模板模板=新模板();
setContent(row.getString(“content”);
template.setMessageType(row.getString(“消息类型”);
template.setSource(row.getString(“source”);
template.setSubject(row.getString(“subject”);
template.setTemplateKey(新的TemplateKey(row.getString(“id”)、Channel.fromString(row.getString((“Channel”))));
返回模板;
}},UUID.fromString(id),channel.toString();
}
在使用上面的模板变量时,可以选择设置ConsistenceLevel,但这将适用于整个对象。我想在我向Scylla DB拍摄的每个查询中指定。如果您坚持使用
ReactiveCqlTemplate
,您将被迫使用它来构建查询,然后在您的数据库上升级
否则,您可以使用reactiveCassandRateTemplate
,您将有一个选项为每个语句传递查询选项
或者,如果您使用存储库,您可以使用@一致性(…)
您已经选择了最低级别,因此需要使用驱动程序类,而不需要从spring获得抽象帮助
谢谢您的回复。选择ReactiveCqlTemplate的原因是它提供了一种简单的方法,您可以在其中传递CQL查询,并将它们转换为PreparedStatement,最终有助于提高DB的性能,因为它不必每次都在DB上解析查询。如果ReactiveCassandRateTemplate做到了这一点,我可以用它,我不知道什么最适合你,抽象级别越高,你得到的“免费”就越多。只有你知道什么适合你的业务需要。但正如答案中所提到的,你走的越低,你就越需要和司机们一起工作。我通常先从最高的抽象开始,然后如果需要,我会越来越低。