簡體   English   中英

如何在 Java Spring 數據 Cassandra 反應式庫中基於每個查詢設置一致性級別

[英]How to set consistency level on per-query basis in Java Spring Data Cassandra Reactive Library

我在 Java 中使用 Spring 數據 Cassandra 反應庫並使用 ReactiveCqlTemplate 查詢 ScyllaDB。

在應用程序級別,我們可以通過在 application.properties 文件中指定如下屬性來設置

spring.data.cassandra.consistency-level=quorum

我的問題是如何使用 ReactiveCqlTemplate 在每個查詢級別上指定一致性級別? 我正在使用 ReactiveCqlTemplate 來查詢我的 Scylla DB。 代碼示例如下:

@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());
}

在使用上面的模板變量時可以選擇設置 ConsistencyLevel,但這將適用於整個 object。 我想指定我向 Scylla DB 拍攝的每個查詢。

看一下:

ReactiveCqlTemplate.setConsistencyLevel(:ConsistencyLevel)

和...

ReactiveCqlTemplate.setSerialConsistencyLevel(:ConsistencyLevel)

注意:這將適用於使用此模板執行的所有語句。

如果您需要對每個語句進行更細粒度的控制,那么我建議:

ReactiveCqlTemplate.execute(:ReactivePreparedStatementCreator)

或者...

ReactiveCqlTemplate.execute(:ReactivePreparedStatementCreator, ReactivePreparedStatementCallback<T>)

創建者允許您創建您喜歡的Statement 並且,回調使您可以訪問 DataStax Statement API,您可以在其中根據需要配置其他設置。

請參閱StatementStatementBuilder

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM