首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在Spring的MongoDB ReadPreference中设置contextConfigLocation

如何在Spring的MongoDB ReadPreference中设置contextConfigLocation
EN

Stack Overflow用户
提问于 2013-10-24 02:45:08
回答 7查看 13.9K关注 0票数 5

我正在通过Spring中的MongoDB驱动程序连接到一个mongodb切分服务器。我正在使用以下版本:

  • spring-webmvc-3.2.1.RELEASE
  • mongo-java-driver/2.10.0/mongo-java-driver-2.10.0
  • spring-data-mongodb-1.2.0.RELEASE

我的Mongo选项设置在contextConfigLocation文件mvc-dispatcher-servlet.xml中。

代码语言:javascript
运行
复制
<mongo:mongo host="mongo.sample.com" port="30000">
     <mongo:options auto-connect-retry="true"
                    slave-ok="true"/>
</mongo:mongo>

它运行得很好,但是从-ok被come.MongoDB.ReadPreference所反对。我只是想知道是否有任何方法可以在readPreference文件中设置Spring的contextConfiLocation。

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2014-02-24 20:18:25

通过将MongoTemplate设置为SECONDARY,扩展@Trisha的响应:“以编程方式在SECONDARY中执行它”。

代码语言:javascript
运行
复制
MongoTemplate template = new MongoTemplate(...);
template.setReadPreference(com.mongodb.ReadPreference.SECONDARY);
票数 8
EN

Stack Overflow用户

发布于 2014-07-07 15:35:54

声明以下bean

代码语言:javascript
运行
复制
<bean id="readPreferenceSecondary" class="com.mongodb.TaggableReadPreference.SecondaryReadPreference">
</bean>

你把这个注入你的蒙戈模板

代码语言:javascript
运行
复制
<bean id="mongoTemplateProdDb" class="org.springframework.data.mongodb.core.MongoTemplate" >
        <property name="readPreference" ref="readPreferenceSecondary"></property>
</bean>
票数 9
EN

Stack Overflow用户

发布于 2018-07-04 05:05:30

如果您使用的是spring-data-mongodb,并且需要使用基于find查询的多个读取首选项,则可以创建多个Mongo模板和/或存储库,如

代码语言:javascript
运行
复制
    @EnableMongoRepositories(basePackages = {
            "com.you.repo.package" }, mongoTemplateRef = "mongoTemplateOne")    
    @Configuration
    public class MongoConfig {

    @Bean(name="mongoTemplateOne")
    public MongoTemplate getMongoTemplateOne() throws UnknownHostException {
        MongoTemplate templateOne = new MongoTemplate(new SimpleMongoDbFactory(new MongoClientURI("YOUR_MONGO_URL")));
        templateOne.setReadPreference(ReadPreference.secondaryPreferred());

        //setting WriteConcern but not relevant for this thread
        templateOne.setWriteConcernResolver(yourWriteConcernResolver());
        return templateOne;
    }

    @Bean(name = "mongoTemplateTwo")
    public MongoTemplate getMongoTemplateTwo() throws UnknownHostException {
        MongoTemplate templateTwo = new MongoTemplate(new SimpleMongoDbFactory(new MongoClientURI("YOUR_MONGO_URL")));
        templateTwo.setReadPreference(ReadPreference.secondaryPreferred());
        return templateTwo;
    }


    private WriteConcernResolver yourWriteConcernResolver() {
        return action -> {
            if (action.getCollectionName()
                    .equals("your_collecton")
                    && (action.getMongoActionOperation() == MongoActionOperation.SAVE
                            || action.getMongoActionOperation() == MongoActionOperation.UPDATE)) {
                return WriteConcern.MAJORITY;
            }
            return action.getDefaultWriteConcern();
        };
    }
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19555987

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档