如何在JavaSpring数据Cassandra反应式库中基于查询设置一致性级别

如何在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查询我的“锡拉数据库”。代码示例如下所示:

我正在使用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做到了这一点,我可以用它,我不知道什么最适合你,抽象级别越高,你得到的“免费”就越多。只有你知道什么适合你的业务需要。但正如答案中所提到的,你走的越低,你就越需要和司机们一起工作。我通常先从最高的抽象开始,然后如果需要,我会越来越低。