2013-05-16 32 views
1

任何人都可以成功使用Grails爲MongoDB設置readPreference?我曾嘗試將readPreference設置放入datasource.groovy中通常的選項閉包中,但沒有喜悅。如何在Grails中爲MongoDB設置readPreference

grails { 
    mongo { 
     replicaSet = [<host1>, <host2>] 
     databaseName = "plover_development" 
     options { 
      readPreference = ReadPreference.secondaryPreferred() 
      connectionsPerHost = 100 
      threadsAllowedToBlockForConnectionMultiplier = 10 
     } 
    } 
} 

但是當Spring嘗試設置readPreference並拒絕設置爲嘗試寫入不可寫Bean屬性時遇到錯誤。必須有一種方法來全局設置readPreference,但我還沒有找到它。

+0

我使用Spring插件中的[MongoDB GORM](http://grails.org/plugin/mongodb),順便說一下。 –

+0

您使用的是哪個版本的Mongo插件和Grails? –

回答

0

documentation,我看到了下面的例子:

mongodb { 
replicaSet = [ "localhost:27017", "localhost:27018"] 
databaseName = 'test' 
options = new MongoOptions(readPreference: ReadPreference.nearest()) 
} 

嘗試分配你的選擇設置,裏面的MongoOptions對象,而不是使用閉合。

+1

我試過了,但它給了我一個錯誤:「初始化應用程序時出錯:沒有這樣的屬性:類:com.mongodb.MongoOptions的鍵」。由於這個文檔基於Morphia(我使用的是Spring的MongoDB GORM),也許這就是爲什麼我不能以這種方式設置readPreference的原因。 –

0

那麼,我可以在集合層面設置readPreference,這是最好的方法。

在封閉映射(例如)通過調用靜態ReadPreference.secondaryPreferred()並將結果推送到readPreference變量。

static mapping = { 
    serviceTier reference: false 
    linkedAccounts reference: false 
    missions reference: false 
    users reference: false 
    name index:true, indexAttributes:[unique:true, dropDups:true] 
    writeConcern WriteConcern.SAFE 
    readPreference ReadPreference.secondaryPreferred() 
} 
+0

你有沒有最終找到一個全球性的設置解決方案? –

+0

我不認爲Grails MongoDB驅動程序直接支持readPreference。我通過整個grails-data-mapping回購來查找對readPreference的引用,但什麼都沒發現。儘管可以通過低級API來執行某些操作。 – Keeth

0

的Grails { 蒙戈{ ..... 選項{ .... slaveOk =真 }} }

已過時,但你可以用它

相關問題