【问题标题】:How to set readPreference for MongoDB in Grails如何在 Grails 中为 MongoDB 设置 readPreference
【发布时间】:2013-05-16 23:35:18
【问题描述】:

有人使用 Grails 成功设置了 MongoDB 的 readPreference 吗?我尝试将 readPreference 设置放入 datasource.groovy 中的常用选项闭包中,但没有任何乐趣。

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

但是当 Spring 尝试设置 readPreference 并拒绝该组尝试写入不可写的 bean 属性时,我遇到了错误。一定有办法全局设置readPreference,但我还没有找到。

【问题讨论】:

  • 我正在使用 Spring 插件中的 MongoDB GORM,顺便说一句。
  • 您使用的是什么版本的 Mongo 插件和 Grails?

标签: mongodb grails


【解决方案1】:

documentation,我看到下面的例子:

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

尝试在 MongoOptions 对象中分配您的选项设置,而不是使用闭包。

【讨论】:

  • 我试过了,但它给了我一个错误“初始化应用程序时出错:没有这样的属性:类的键:com.mongodb.MongoOptions”。由于这个文档是基于 Morphia 的(我使用的是 Spring 的 MongoDB GORM),也许这就是为什么我不能这样设置 readPreference 的原因。
【解决方案2】:

嗯,我可以在 Grails 的集合级别设置 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()
}

【讨论】:

  • 您是否最终找到了全局设置的解决方案?
  • 我认为 Grails MongoDB 驱动程序根本不直接支持 readPreference。我在整个 grails-data-mapping 存储库中搜索了对 readPreference 的引用,但一无所获。不过,也许可以通过低级 API 做一些事情。
【解决方案3】:

圣杯{ 蒙哥{ ...... 选项 { …… slaveOk = true } } }

已弃用,但您可以使用它

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-08-11
    • 1970-01-01
    • 1970-01-01
    • 2022-08-05
    • 1970-01-01
    • 2016-06-18
    • 2017-09-01
    • 1970-01-01
    相关资源
    最近更新 更多