当前位置: 首页 > 知识库问答 >
问题:

java web应用中的MongoDB配置

叶富
2023-03-14

我正在寻找一些关于为使用java运行的Web应用程序设置mongoDB的正确方法的建议。从mongoDB教程中,我了解到我应该只有一个Mongo类的实例。

Mongo类被设计成线程安全的,并在线程之间共享。通常,您只为给定的DB集群创建一个实例,并在应用程序中使用它。

所以我有一个单例提供者(我使用guice进行注入)

@Singleton
public class MongoProvider implements Provider<Mongo> {
    private Mongo mongo;

    public Mongo get() {
        if (mongo == null)
            mongo = new Mongo("localhost", 27017);
        return mongo;
    }
}

每当我必须在我的webapp中使用mongo时,我就会注入提供者并获得相同的mongo实例。

public class MyService {
    private Provider<Mongo> mongoProvider;

    @Inject
    private MyService(Provider<Mongo> mongoProvider) {
        this.mongoProvider = mongoProvider;
    }

    public void execute() {
        DB db = mongoProvider.get().getDB("mydatabase");
        DBCollection coll = db.getCollection("mycollection");

        // Do stuff in collection
        ...
    }
}

我觉得奇怪的是,每次我访问我的数据库时,我都会从mongo收到这样的日志:

[initandlisten]已接受192.168.1.33:54297#15的连接

从192.168.1.33:54299接受连接

到目前为止,我还没有遇到任何问题,但我想知道这是否是一种良好的做法,以及当接受的连接数量太多时,我是否不会遇到任何问题。

  • 我的整个应用程序是否也应该只有一个DB对象实例
  • 我是否必须以不同的方式配置MongoDB,以便在一段时间后自动关闭连接?还是必须手动关闭连接?我读过一些关于在Mongo上使用close()方法的文章,但我不确定何时或是否调用

谢谢你的建议。

共有2个答案

申昌勋
2023-03-14

创建了这样的om MondoDB网站:

“Java MongoDB驱动程序是线程安全的。例如,如果您在web服务环境中使用,您应该创建一个MongoClient实例,并且可以在每个请求中使用它。MongoClient对象维护一个到数据库的内部连接池(默认池大小为10)。对于到DB的每个请求(查找、插入等)Java线程将从池中获取连接,执行操作,然后释放连接。这意味着每次使用的连接(插座)可能不同。"

来自MongoSite的常见问题解答,我认为这完全符合你的问题。

http://docs.mongodb.org/manual/faq/developers/#why-mongodb是否记录了这么多被接受的连接事件

顾嘉纳
2023-03-14

这是一个很好的做法。Mongo的每个实例都管理一个连接池,因此您将在mon神日志中看到多个连接,池中的每个连接一个。默认池大小为10,但可以使用MongoOptions中的ConnectionsPerHost字段进行配置。

Mongo实例还维护DB实例的缓存,所以您不必担心自己会将它们维护为单例。

您不必配置Mongo来自动关闭连接。您可以在适当的时间调用Mongo#close来关闭连接池中的所有套接字。

 类似资料:
  • 我正在开发一个使用Hibernate的简单JSF应用程序。我将所有必需的库导入WEB-INF/lib文件夹,并将它们指向类路径。但是当我尝试编译它时,我遇到了错误: 这是我创建SessionFactory并使用它的代码: 我在这里使用它: 那我做错了什么?我该怎么解决这个问题?

  • 本文向大家介绍解决idea中javaweb的mysql8.0.15配置问题,包括了解决idea中javaweb的mysql8.0.15配置问题的使用技巧和注意事项,需要的朋友参考一下 mysql8.0.x以后的版本在连接数据库的时候有些不同。 首先: Class.forName("com.mysql.cj.jdbc.Driver"); 其次: 另外值得注意的是,在idea中创建的javaweb项目

  • 使用UnknownHostException checked异常污染代码。使用checked exception是不可取的,因为基于Java的bean元数据使用方法作为设置对象依赖关系的手段,这使得调用代码变得混乱。 所以Spring提议 但不幸的是,自Spring-data-mongoDB1.7以来,MongoFactoryBean已被弃用,并被MongoClientFactoryBean所取代

  • 已安装Java版本(签入控制面板): jre1.6.0,Java更新2, Java更新3, Java更新5, Java更新31 (在C:/Program Files/Java相关文件夹中找到:jre1.6.0、jre1.6.0_02、jre1.6.0_03、jre1.6.0_05、jre6) 根据http://docs.oracle.com/javase/1.5.0/docs/guide/java

  • 本文向大家介绍在 Python 应用中使用 MongoDB的方法,包括了在 Python 应用中使用 MongoDB的方法的使用技巧和注意事项,需要的朋友参考一下 在这篇文章中,将向您展示如何使用Python链接目前主流的MongoDB(V3.4.0)数据库,主要使用PyMongo(v3.4.0)和MongoEngine(V0.10.7)。同时比较SQL和NoSQL。 英文原文:https://r

  • 我们可以使用AbstractMongoConfiguration(http://docs.spring.io/spring-data/mongodb/docs/current/api/org/springframework/data/mongodb/config/AbstractMongoConfiguration.html)进行mongob配置。此外,我们可以使用application.prop