【问题标题】:Jongo MongoDB: How to specify a default ReadPreferenceJongo MongoDB:如何指定默认的 ReadPreference
【发布时间】:2015-02-09 19:21:25
【问题描述】:
我知道我可以使用<collection>.withReadPreference(primaryPreferred()).find(...) 为每个查询设置 readPreference。但是,如果可能,我更愿意设置一个全局默认 readPreference 以使用“最近”,然后在必要时能够为单个查询覆盖它。使用 Jongo 是否有可能/首选的方法来做到这一点?
编辑:由于 Jongo 是使用 MongoClient().getDB() 初始化的,因此是否适合使用指定 ReadPreference 的选项来初始化我的 MongoClient?我想我要问的是 - 如果我这样做,这些设置会延续并应用于 Jongo 内部,还是有不同的方式直接在 Jongo 中处理它?
提前谢谢。
【问题讨论】:
标签:
java
mongodb
mongodb-java
jongo
【解决方案1】:
可能应该在提问之前尝试过,但我会为将来可能有这个问题的任何人提供答案。简短的回答是 - 是的,使用 MongoClientOptions 对象通过 MongoClient 进行设置将延续到 Jongo。
具体来说,我在构建选项的方法中使用了类似的东西(为了清楚起见,这个例子比我必须做的更详细):
protected MongoClientOptions getOptions(){
MongoClientOptions mClientOpts;
Builder mClientOptionsBuilder = new MongoClientOptions.Builder();
mClientOptionsBuilder.readPreference(ReadPreference.nearest());
mClientOpts = mClientOptionsBuilder.build();
System.out.println("[MongoConfig]: " + mClientOpts.toString());
return mClientOpts;
}
然后您可以只实例化一个 new MongoClient(new ServerAddress(...), this.getOptions()); 并使用该客户端实例来获取您的数据库引用,该引用最终用作实例化 Jongo 的参数。
需要明确的是,我这样做的原因是能够从 MongoDB ReplicaSet 的辅助成员中读取,如果/当这些辅助成员以最低延迟可用时。