RavenDB v5.4:集成测试中全局配置读取前等待索引完成
全局配置查询等待非 stale 结果的方案
针对你在集成测试环境遇到的问题,当前版本的RavenDB确实支持通过IDocumentStore的全局配置,让所有查询默认等待索引更新完成,无需逐个查询添加WaitForNonStaleResults。具体实现方式如下:
1. 初始化DocumentStore时设置全局查询策略
在创建并初始化DocumentStore的阶段,通过配置Conventions.Querying下的相关参数,统一设置查询的一致性要求:
using (var store = new DocumentStore { Urls = new[] { "http://localhost:8080" }, Database = "YourTestDatabase" }) { // 全局强制查询等待非 stale 结果 store.Conventions.Querying.DefaultQueryingConsistency = QueryingConsistency.WaitForNonStaleResults; // 可选:自定义默认等待超时时间 store.Conventions.Querying.DefaultWaitForNonStaleResultsTimeout = TimeSpan.FromSeconds(5); store.Initialize(); }
2. 针对测试环境的按需配置
如果只需要在集成测试环境启用该规则,建议通过环境变量或配置开关控制,避免影响生产环境:
var isTestEnv = bool.Parse(Environment.GetEnvironmentVariable("INTEGRATION_TEST_ENV") ?? "false"); using (var store = new DocumentStore { Urls = new[] { "http://localhost:8080" }, Database = "TestDatabase" }) { if (isTestEnv) { store.Conventions.Querying.DefaultQueryingConsistency = QueryingConsistency.WaitForNonStaleResults; store.Conventions.Querying.DefaultWaitForNonStaleResultsTimeout = TimeSpan.FromSeconds(5); } store.Initialize(); }
补充说明
QueryingConsistency.WaitForNonStaleResults会让所有session.Query()发起的查询自动等待索引更新到最新状态,效果等同于给每个查询手动添加.Customize(x => x.WaitForNonStaleResults())session.Load()方法不受该配置影响,因为它直接从文档存储读取数据,不依赖索引- 默认超时时间可通过
DefaultWaitForNonStaleResultsTimeout自定义,未设置时将使用RavenDB内部默认值(通常为15秒)
内容的提问来源于stack exchange,提问作者LLL
相关产品推荐
相关产品推荐

