首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MongoClient的生命周期应该是什么?

MongoClient的生命周期应该是什么?
EN

Stack Overflow用户
提问于 2014-08-15 22:15:10
回答 1查看 91关注 0票数 1

基于afMongo实例,我目前正在这样做:

代码语言:javascript
复制
mongoClient := MongoClient(ActorPool(), `mongodb://localhost:27017`)
collection  := mongoClient.db("mydb").collection("mycollection")
...
// inserts or queries here
...
mongoClient.shutdown

我的理解是,MongoClient使用池连接。如果这是正确的,那么我相信我可以在所有DAO之间共享MongoClient,并且只有在afBedSheet应用程序关闭时才关闭它。

  1. 这个假设正确吗?
  2. 请问如何将MongoClient关机与afBedSheet关机挂钩?
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-08-16 10:42:13

  1. 是。你只需要一个MongoClient
  2. 使用RegistryShutdown服务。当BedSheet关闭时,它也会关闭IoC注册表。

我会把ConnectionManager作为一项服务,然后关闭它。所以在你的AppModule

代码语言:javascript
复制
@Build
static ConnectionManager buildConnectionManager() {
    ConnectionManagerPooled(ActorPool(), `mongodb://localhost:27017`)
}

@Contribute { serviceType=RegistryShutdown# }
static Void contributeRegistryShutdown(Configuration config, ConnectionManager conMgr) {
    config.add(|->| { conMgr.shutdown } )
}

MongoClient也可以是一种服务。

你也可以把上面写的再写一点,嗯,对。我倾向于使用ActorPools服务来监视它们。

代码语言:javascript
复制
static Void bind(ServiceBinder binder) {
    binder.bind(MongoClient#)
}

@Build { serviceId="afMongo::ConnectionManager" }
static ConnectionManager buildConnectionManager(ConfigSource configSrc, ActorPools actorPools) {
    actorPool := actorPools.get("myPod.connectionManager")
    return ConnectionManagerPooled(actorPool , `mongodb://localhost:27017`)
}

@Contribute { serviceType=ActorPools# }
static Void contributeActorPools(Configuration config) {
    config["myPod.connectionManager"] = ActorPool() { it.name = "myPod.connectionManager"; it.maxThreads = 1 }
}

@Contribute { serviceType=RegistryShutdown# }
static Void contributeRegistryShutdown(Configuration config, ConnectionManager conMgr) {
    config["myPod.closeConnections"] = |->| {
        conMgr.shutdown
    }
}

myPod.closeConnections只是一个任意的名称,在示例中它不在其他任何地方使用。

但您可以使用它覆盖或删除贡献。一些未来的测试场景可以添加具有以下内容的MyTestAppModule

代码语言:javascript
复制
@Contribute { serviceType=RegistryShutdown# }
static Void contributeRegistryShutdown(Configuration config) {
    config.remove("myPod.closeConnections")
}

在这个特殊的例子中可能没有用,但是了解一下是有用的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25334959

复制
相关文章

相似问题

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