2013-10-24 2 views
2

Я подключаюсь к серверу с чередованием MongoDB через java-драйвер mongodb в Spring MVC. Я использую следующие версии:Как установить MongoDB ReadPreference в Spring MVC contextConfigLocation

  • весна-webmvc-3.2.1.RELEASE
  • Монго-Java-драйвер/2.10.0/Монго-ява-водитель-2.10.0
  • весна-данных -mongodb-1.2.0.RELEASE

опция Моей Mongo устанавливается в contextConfigLocation файл MVC-диспетчерском-servlet.xml

<mongo:mongo host="mongo.sample.com" port="30000"> 
    <mongo:options auto-connect-retry="true" 
        slave-ok="true"/> 
</mongo:mongo> 

Она работает довольно хорошо, но slave-ok устарел, придя. MongoDB.ReadPreference. Мне просто интересно, есть ли способ установить readPreference для Spring MVC в файле contextConfiLocation.

+0

Вы можете установить его через 'mongoTemplate' точно –

+0

Глядя на схему (http://www.springframework.org/schema/data/mongo/spring-mongo-1.0.xsd), вы можете установить только slave-ok , нет «вторичного предпочтительного» варианта (который является заменой). Вы будете в порядке, используя slave-ok, он по-прежнему поддерживается в драйвере Mongo, несмотря на то, что он не одобрен. Но вы можете определенно сделать это на MongoTemplate, установив предпочтение чтения второму. – Trisha

+0

@Trisha, вы правы, что Slave-ok просто поддерживается. Сделать это в MongoTemplate программно вторично, также работает, но слишком ли слишком сложно, если я вызову setReadPreference() каждый раз, когда я хочу получить коллекцию из MongoTemplate? – sorebrek

ответ

4

Расширение @ Ответ Trisha на ответ: «Сделайте это в MongoTemplate программно», установив ReadPreference на SECONDARY.

MongoTemplate template = new MongoTemplate(...); 
template.setReadPreference(com.mongodb.ReadPreference.SECONDARY); 
7

Объявить следующий боб

<bean id="readPreferenceSecondary" class="com.mongodb.TaggableReadPreference.SecondaryReadPreference"> 
</bean> 

и

Вы вводите это в mongotemplate

<bean id="mongoTemplateProdDb" class="org.springframework.data.mongodb.core.MongoTemplate" > 
     <property name="readPreference" ref="readPreferenceSecondary"></property> 
</bean> 
1

В случае, если вы имеете более чем одну вторичную (реплика-комплект) вас может быть более конкретным и явно указать драйверу mongo, из которого вы хотите читать, используя tags.

На стороне Монго вы запустите эту команду:

db.getMongo().setReadPref('secondaryPreferred', 
          [{"tagName":"TagVal1"}, 
          {"tagName":"TagVal2"}, 
          {}]) 

В коде это выглядит следующим образом:

MongoTemplate template = new MongoTemplate(...) 
template.setReadPreference(ReadPreference.secondaryPreferred("your DBObject that reflect your mongo tag names"); 

Надеется, что это помогает.

Смежные вопросы