2013-10-24 46 views
2

我通過Spring MVC中的mongodb java驅動程序連接到MongoDB分片服務器。我使用以下版本:如何在Spring MVC中設置MongoDB ReadPreference contextConfigLocation

  • 彈簧webmvc-3.2.1.RELEASE
  • 蒙戈-Java的應用程序/ 2.10.0 /蒙戈-java的驅動程序2.10.0
  • 彈簧數據-mongodb-1.2.0.RELEASE

我蒙戈選項中的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被come.MongoDB.ReadPreference棄用。我只是想知道是否有任何方法在contextConfiLocation文件中設置Spring MVC的readPreference。

+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中以編程方式執行到二級也是可行的,但是如果每次我想從MongoTemplate獲取一個集合時調用setReadPreference(),它是否會有太多開銷? – sorebrek

回答

4

通過將ReadPreference設置爲SECONDARY來擴展@Trisha對答案的迴應:「以編程方式在MongoTemplate中執行此操作」。

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"); 

希望它能幫助。

相關問題