Mongo 连接泄漏与吗啡

2024-01-20

我有一个Servlet with static Mongo = new Mongo() and Morphia morphia = new Morphia()对象。每一次GET被调用时,我执行以下操作:

doGet(...){
...
datastore = morphia.createDatastore(mongo, dbName);
...
}

我不关闭datastore,因为没有 close 方法。每次我调用 servlet 时,mongo 中使用的连接数都会增加:

{ "current" : 113, "available" : 706, "totalCreated" : NumberLong(122) }
> db.serverStatus().connections { "current" : 115, "available" : 704, "totalCreated" : NumberLong(124) }
> db.serverStatus().connections { "current" : 116, "available" : 703, "totalCreated" : NumberLong(125) }
> db.serverStatus().connections { "current" : 121, "available" : 698, "totalCreated" : NumberLong(130) }
> db.serverStatus().connections { "current" : 122, "available" : 697, "totalCreated" : NumberLong(131) }
> db.serverStatus().connections { "current" : 128, "available" : 691, "totalCreated" : NumberLong(137) }

关闭与 mongo 和 morphia 的连接的正确方法是什么?连接真正泄漏的地方是什么?谢谢。


您可以创建一个singleton Datastore object

public enum MongoDBHelper { // the best way to implement singletons, due to the author of Effective Java  
INSTANCE;

private DB db;
private Datastore datastore;

private final String SERVER_URL = "...";
private final int SERVER_PORT = ...;
private final String USERNAME= "...";
private final String PASSWORD = "...";
private final String DATABASE_NAME = "...";

private MongoDBHelper() {

    try {

        MongoClient mongoClient = new MongoClient(SERVER_URL, SERVER_PORT);

        this.db = mongoClient.getDB(DATABASE_NAME);
        this.db.authenticate(USERNAME,PASSWORD.toCharArray());

        Morphia morphia = new Morphia();

        this.datastore = morphia.createDatastore(mongoClient, DATABASE_NAME);

        morphia.mapPackage("package");
    } catch (UnknownHostException e) {
        e.printStackTrace();
    }

}

public DB getDB() {
    return this.db;
}

public Datastore getDatastore() {
    return this.datastore;
}
}

现在你可以重复使用相同的Datastore您的应用程序中的对象

 Datastore datastore = MongoDBHelper.INSTANCE.getDatastore()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Mongo 连接泄漏与吗啡 的相关文章

随机推荐

  • Rails 4 带有 fields_for 的嵌套属性不保存到数据库

    我想使用accepts nested attributes for 通过一种表单在两个不同的表 场地和停车场 上创建记录 我希望用户能够创建一个新场地 并通过复选框指定该场地可用的停车选项 当我提交表单时 将创建包含模型 场地 的记录 但嵌
  • javascript:动态下拉菜单值

    我想创建两个下拉表单 如果我在第一个菜单上选择一个项目 第二个菜单将显示相应的值 例如 如果我在第一个菜单上选择 水果 那么第二个菜单将显示 苹果 香蕉 等 它必须有值 以便我可以将其插入数据库 html如下
  • iPython:无法导入名为 sklearn 的模块

    我可以使用 python 解释器导入 sklearn 但是当我尝试在 iPython 笔记本中执行相同操作时 iPython 会抛出 ImportError 知道是什么导致了这个问题吗 我需要在 iPython 中使用一个模块 我不确定这是
  • Django限制查询

    我正在尝试运行 Django 查询 将返回的结果限制为 5 个项目 这很容易 但查询并不总是返回 5 个项目 在这种情况下 像这样的语句 我的代码 会失败 users User objects filter username istarts
  • 代码签名错误:SDK“iOS 11.0”中的产品类型“应用程序”需要代码签名

    我正在使用 GitLab CI 自动构建适用于 Android 和 iOS 的应用程序 我的 iOS 命令行构建不断失败并出现以下错误 Code Signing Error Code signing is required for prod
  • 将模型划分到目录中是一个坏主意吗?

    我的 Rails 应用程序中有 100 多个模型 为了便于组织 我将它们划分为文件夹 所有这些仍然位于主模型文件夹下 只是为了更轻松地在项目上导航并查看相关文件 这是一个坏主意吗 Rails 的方法是什么 不 这不是一个坏主意 很多人都这么
  • 未捕获的语法错误:参数列表后缺少 )

    未捕获的语法错误 参数列表后缺少
  • Xcode 机器人错误:提前意外退出,操作从未完成引导

    我有一个用 Swift 编写的项目 有一个主要目标和两个测试目标 一个用于使用quick https github com Quick Quick框架 它有 3KIF https github com kif framework KIF测试
  • android sax 不解析“dc:creator”?

    希望有人可以提供一些指导 我一直在使用带有多个提要的 android sax 解析器 现在 当我想解析包含以下内容的项目时
  • Postgresql DB 备份理想实践

    使用pg dump 进行PostgreSQL 逻辑备份的理想做法是什么 从备用 从属节点进行备份是否理想 如果复制延迟小于 200 毫秒 从备用 从属节点进行备份是否理想 是否需要更改任何特定配置 哪种备份方法是逻辑备份或物理备份的好方法
  • 将数据保存到 LocalStorage,然后使用 android Java 检索它

    我正在加载本地网页android应用程序使用WebView and my web page有一个按钮 比方说 btnA 当用户点击 btnA 时 javascript调用函数来保存deviceID在浏览器的localstorage 现在有几
  • 如何对包含 NaN 的 JavaScript 数组进行排序?

    我正在尝试对有时有的数组进行排序Infinity or NaN 当我使用标准 JavaScript 时array sort 它似乎排序直到达到NaN然后我得到随机结果 var array 02 2 2 Nan Infinity 20 有没有
  • 函数类型中的 Plus 与 S

    以下向量声明cons cons a gt Vect n a gt Vect n 1 a cons x xs x xs 因错误而失败 Type mismatch between S n and plus n 1 而下面的向量append编译并
  • 当闪亮仪表板中存在 menuSubItems 时显示 menuItem 的内容

    有没有一种方法可以在闪亮仪表板的内容窗格中实际显示具有现有 menuSubItems 的 menuItem 的内容 在示例中 我尝试将 tabName charts 添加到菜单项 图表 中 以显示选项卡项 图表 的内容 但是 除了打开菜单并
  • 如何将 Ruby 脚本转为 Web 应用程序

    我目前有一个脚本 可以侦听包含给定关键字的地理定位推文 然后将它们绘制在 Google Fusion Tables 地图上 我不太确定这是如何转移到网络应用程序的 我想要一个界面 用户可以在其中输入一些关键字进行搜索 然后我的应用程序将打开
  • 与单视图应用程序相比,带有 UICollectionView 的 Today Extension 具有不同的行为

    我尝试将集合视图添加到今日扩展 https developer apple com library content documentation General Conceptual ExtensibilityPG Today html指定每
  • 没有 System.Drawing/GDI+ 的 asp.net/c# 中的图像操作

    net 有替代图像处理库吗 我更喜欢托管和开源的东西 我问这个有两个原因 我过去遇到过使用 System Drawing 调试 GDI 错误的困难 我读到 在 ASP NET Web 应用程序中使用 System Drawing 并不是 1
  • Logback + Wildfly 8 - 不正确的模式

    我的 logback wildfly 8 配置有问题 我正在使用简单的 ConsoleAppender appender STDOUT ConsoleAppender encoder PatternLayoutEncoder pattern
  • 获取JPA实体版本的通用方法

    我有一个未知的 JPA 实体 需要知道它的版本 我找不到一种通用的方法来做到这一点 我尝试了元模型 但不知道要传递给 getVersion 方法的内容 Object entity Metamodel metamodel entityMana
  • Mongo 连接泄漏与吗啡

    我有一个Servlet with static Mongo new Mongo and Morphia morphia new Morphia 对象 每一次GET被调用时 我执行以下操作 doGet datastore morphia cr