基于afMongo example我目前正在做的事情:
mongoClient := MongoClient(ActorPool(), `mongodb://localhost:27017`)
collection := mongoClient.db("mydb").collection("mycollection")
...
// inserts or queries here
...
mongoClient.shutdown
我的理解是MongoClient使用池连接。如果这是正确的,那么我相信我可以跨所有DAO共享MongoClient,只在afBedSheet应用程序关闭时关闭它。
答案 0 :(得分:1)
MongoClient
。我会将ConnectionManager
作为服务,并将其关闭。所以在AppModule
:
@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
服务来密切关注它们。
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
以下内容:
@Contribute { serviceType=RegistryShutdown# }
static Void contributeRegistryShutdown(Configuration config) {
config.remove("myPod.closeConnections")
}
在这个特定的例子中可能没什么用处,但知道的有用。