上下文: 客户端将调用发送到服务器以执行作业。对于每个工作,我创建一个新的MongoClient(使用Morphia):
MongoClient mongoClient = new MongoClient("000.00.000.000", 27017);
Morphia morphia = new Morphia();
Datastore ds = morphia.createDatastore(mongoClient, "myDatastore");
//operations on the datastore: save, find, update...
问题:这是好的做法/完全错误吗?或者我应该只为整个应用程序创建一个MongoClient / Morphia实例作为全局变量,并让每个作业调用它? (as described here)
答案 0 :(得分:1)
doc for the Mongo Java driver说:
Java MongoDB驱动程序是线程安全的。如果您在网络中使用 例如,您应该创建一个单独的服务环境 MongoClient实例,您可以在每个请求中使用它。该 MongoClient对象维护一个内部连接池 数据库(默认池大小为10)。对于DB的每个请求(查找, 插入等)Java线程将从池中获取连接, 执行操作,并释放连接。这意味着 每次使用的连接(套接字)可能不同。
所以...每个应用程序一个MongoClient,而不是每个被调用的工作。