mongodb打开连接问题

2023-11-24

我的 mongo 控制台中有以下日志:

Tue Jul 23 17:20:01.301 [initandlisten] waiting for connections on port 27017
Tue Jul 23 17:20:01.401 [websvr] admin web console waiting for connections on port 28017
Tue Jul 23 17:20:01.569 [initandlisten] connection accepted from 127.0.0.1:58090 #1 (1 connection now open)
Tue Jul 23 17:20:01.570 [initandlisten] connection accepted from 127.0.0.1:58089 #2 (2 connections now open)
Tue Jul 23 17:20:21.799 [initandlisten] connection accepted from 127.0.0.1:58113 #3 (3 connections now open)
....
....
....

同样,日志继续,现在是 112。每次我启动 mongo 服务器时都会发生这种情况。我的代码中只有一个单例连接。这里可能出现什么问题:

public static DB getConnection(String databaseName) throws AppConnectionException {

    if (null != db) {
        Logger.debug("Returning existing db connection...!");
        return db;
    }

    Logger.debug("Creating new db connection...!");
    final String connStr = PropertyRetreiver.getPropertyFromConfigurationFile("rawdata.url");

    try {

        final MongoClientURI uri = new MongoClientURI(connStr);
        final MongoClient client = new MongoClient(uri);
        db = client.getDB(databaseName);

    } catch (UnknownHostException e) {
        throw new AppConnectionException(
                "Unable to connect to the given host / port.");
    }

    return db;
}

MongoClient有内部连接池。可以配置最大连接数(默认为 100)。您可以通过使用来设置它MongoClientOptions像这样:

MongoClientOptions options = MongoClientOptions.builder()
                .connectionsPerHost(100)
                .autoConnectRetry(true)
                .build();

然后将这些选项提供给MongoClient(在Mongo Java API v2.11.1中检查过)。 池中的连接保持打开状态(打开和关闭连接通常是一项昂贵的操作),以便以后可以重用它们。

我还将使用重构您的 MongoDB 客户端单例enum例如为了避免放置synchronized就这个方法。

这是我的意思的草图:

public enum MongoDB {
    INSTANCE;

    private static final String MONGO_DB_HOST = "some.mongohost.com";
    private Mongo mongo;
    private DB someDB;

    MongoDB() {

        MongoClientOptions options = MongoClientOptions.builder()
                .connectionsPerHost(100)
                .autoConnectRetry(true)
                .readPreference(ReadPreference.secondaryPreferred())
                .build();

        try {
            mongo = new MongoClient(MONGO_DB_HOST, options);
        } catch (UnknownHostException e) {
            e.printStackTrace();
        }

        someDB = mongo.getDB("someDB");
         //authenticate if needed
         //boolean auth = someDB.authenticate("username", "password".toCharArray());
         //if(!auth){
         //     System.out.println("Error Connecting To DB");
         //}        
    }

    public DB getSomeDB() {
        return someDB;
    }

    //call it on your shutdown hook for example 
    public void close(){
        mongo.close();
    }
}

然后,您可以通过以下方式访问您的数据库

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

mongodb打开连接问题 的相关文章

  • Hibernate注解放置问题

    我有一个我认为很简单的问题 我见过两种方式的例子 问题是 为什么我不能将注释放在字段上 让我举一个例子 Entity Table name widget public class Widget private Integer id Id G
  • 在文本文件中写入多行(java)

    下面的代码是运行命令cmd并使用命令行的输出生成一个文本文件 下面的代码在 Eclipse 的输出窗口中显示了正确的信息 但在文本文件中只打印了最后一行 谁能帮我这个 import java io public class TextFile
  • 插入最大日期(独立于数据库)

    在我的本地设置中 我使用一个简单的 H2 数据库 托管 解决方案将有另一个 类似但不相同 数据库 我需要将最大可能日期插入到日期时间列中 我尝试使用 Instant MAX 但是 这会导致列中出现 169104626 12 11 20 08
  • 是什么决定了从 lambda 创建哪个函数式接口?

    请考虑这个例子 import java util function Consumer public class Example public static void main String args Example example new
  • SAML 服务提供商 Spring Security

    当使用预先配置的服务提供者元数据时 在 Spring Security 中 是否应该有 2 个用于扩展元数据委托的 bean 定义 一份用于 IDP 元数据 一份用于 SP 元数据
  • java中如何连接字符串

    这是我的字符串连接代码 StringSecret java public class StringSecret public static void main String args String s new String abc s co
  • wait() 在游戏中如何工作?

    在 playframework 的文档中here http www playframework org documentation 1 2 1 asynchronous已写 public static void loopWithoutBlo
  • 按第一列排序二维数组,然后按第二列排序

    int arrs 1 100 11 22 1 11 2 12 Arrays sort arrs a b gt a 0 b 0 上面的数组已排序为 1 100 1 11 2 12 11 22 我希望它们按以下方式排序a 0 b 0 首先 如果
  • 当从服务类中调用时,Spring @Transactional 不适用于带注释的方法

    在下面的代码中 当方法内部 是从内部调用的方法外部 应该在交易范围内 但事实并非如此 但当方法内部 直接从调用我的控制器class 它受到事务的约束 有什么解释吗 这是控制器类 Controller public class MyContr
  • Java 文件上传速度非常慢

    我构建了一个小型服务 它从 Android 设备接收图像并将其保存到 Amazon S3 存储桶中 代码非常简单 但是速度非常慢 事情是这样的 public synchronized static Response postCommentP
  • 在 S3 中迭代对象时出现“ConnectionPoolTimeoutException”

    我已经使用 aws java API 一段时间了 没有遇到太多问题 目前我使用的是库 1 5 2 版本 当我使用以下代码迭代文件夹内的对象时 AmazonS3 s3 new AmazonS3Client new PropertiesCred
  • Calendar.getInstance(TimeZone.getTimeZone("UTC")) 不返回 UTC 时间

    我对得到的结果真的很困惑Calendar getInstance TimeZone getTimeZone UTC 方法调用 它返回 IST 时间 这是我使用的代码 Calendar cal Two Calendar getInstance
  • 如何在selenium服务器上提供自定义功能?

    我知道可以通过某种方法获得一些硒功能 其中之一如下 driver getCapabilities getBrowserName 它返回浏览器名称的值 但如果它指的是一个可用的方法 如果我没有误解的话 这似乎与自定义功能有关 就像我的意思是
  • Javafx过滤表视图

    我正在尝试使用文本字段来过滤表视图 我想要一个文本字段 txtSearch 来搜索 nhs 号码 名字 姓氏 和 分类类别 我尝试过在线实施各种解决方案 但没有运气 我对这一切仍然很陌生 所以如果问得不好 我深表歉意 任何帮助将不胜感激 我
  • 如何知道抛出了哪个异常

    我正在对我们的代码库进行审查 有很多这样的陈述 try doSomething catch Exception e 但我想要一种方法来知道 doSomething 抛出了哪个异常 在 doSomething 的实现中没有 throw 语句
  • java.lang.NumberFormatException: Invalid int: "3546504756",这个错误是什么意思?

    我正在创建一个 Android 应用程序 并且正在从文本文件中读取一些坐标 我在用着Integer parseInt xCoordinateStringFromFile 将 X 坐标转换为整数 Y 坐标的转换方法相同 当我运行该应用程序时
  • Cucumber Java 与 Spring Boot 集成 - Spring @Autowired 抛出 NullPointer 异常

    我正在为 Spring boot 应用程序编写 cucumber java 单元测试来测试每个功能 当我与 Spring Boot 集成时 Autowired 类抛出 NullPointer 异常 Spring Boot应用程序类 Spri
  • 替换后增量

    我自己已经有一个问题了 但我想扩展它后增量示例 https stackoverflow com questions 51308967 post increment with example char a D int b 5 System o
  • 具有特定参数的 Spring AOP 切入点

    我需要创建一个我觉得很难描述的方面 所以让我指出一下想法 com x y 包 或任何子包 中的任何方法 一个方法参数是接口 javax portlet PortletRequest 的实现 该方法中可能有更多参数 它们可以是任何顺序 我需要
  • GUI Java 程序 - 绘图程序

    我一直试图找出我的代码有什么问题 这个想法是创建一个小的 Paint 程序并具有红色 绿色 蓝色和透明按钮 我拥有我能想到的让它工作的一切 但无法弄清楚代码有什么问题 该程序打开 然后立即关闭 import java awt import

随机推荐

  • 谷歌登录gapi未定义

    我正在尝试在我的网站上启用谷歌登录 该按钮有效 与我的帐户同步 但我无法从谷歌访问用户ID 这就是我的想法
  • jQuery 按类计数元素 - 实现此目的的最佳方法是什么?

    我想做的是计算当前页面中具有相同类的所有元素 然后将其添加到输入表单的名称中 基本上我允许用户单击 span 然后通过这样做为更多相同类型的项目添加另一个 但我想不出一种方法来简单地用 jQuery JavaScript 来计算所有这些 然
  • IllegalStateException 地图大小不应为 0 [重复]

    这个问题在这里已经有答案了 我有一个MapFragment显示地图 如果用户带着地图离开活动 或设备进入睡眠状态 然后回来onResume接到电话后 我将地图移回到标记处 但是当我移动相机时我遇到了异常 07 23 16 28 42 725
  • 使用 jQuery 删除文本

    有没有办法使用 jQuery 删除未包含在任何标签中的文本 p This is some text p This is unwrapped text to be removed span some more text span 感谢您的帮助
  • 为什么要执行更高阶的程序?

    因此 如果一种语言提供了更高阶的过程 那么我可以拥有返回过程的过程 就像是 define Proc a b c lambda x method body here in terms of a b c and x 要创建新程序 我只需执行以下
  • 难以实现 1Gbit UDP 吞吐量

    对于负载小于1470的UDP数据包 是否有可能达到1Gbit的吞吐量 由于数据包较小 实现这样的吞吐量应该存在一些瓶颈 I O 操作系统 网络等 我想驱动程序和硬件可能必须调整为小数据包 高吞吐量 有人尝试用小 UDP 数据包成功实现 1G
  • 如何用JavaScript获取HTML页面的标题?

    如何使用 JavaScript 获取 HTML 页面的标题 Use document title console log document title MDN 网络文档
  • 监听 .NET 控制台应用程序中的按键

    How can I continue to run my console application until a key press like Esc is pressed 我假设它缠绕在 while 循环中 我不喜欢ReadKey因为它会
  • 仅抑制对其他人代码的 pytest 警告

    我正在尝试pytest首次 如何抑制有关我的代码所依赖的其他人的代码发出的警告 而不抑制有关我自己的代码的警告 现在我的里面有这个pytest ini所以我不必看到 pytest 警告我有关某些弃用的信息jsonschema我正在使用的包
  • jQuery:触发 .click() 事件,一个接着一个

    我遇到的情况是 我必须在页面上执行多个操作才能初始化其设置 我还没有任何代码 因为坦率地说 我很难找到开始的地方 这是我想做的 jQuery document ready function element one trigger click
  • 跨域窗口之间的 postMessage 在 IE10 中不起作用(它适用于框架)

    我按照这个教程http davidwalsh name window postmessage 并创建了可在 Chrome 和 Firefox 中运行但不能在 IE 10 中运行的跨域消息传递脚本 有人能给我一些关于如何针对 IE 8 修改它
  • cocoa 获取已安装应用程序的列表

    有没有办法在可可中获取当前用户所有已安装的应用程序 NSArray runningApps NSWorkspace sharedWorkspace launchedApplications 上面给出了我当前正在运行的应用程序 但对于我的应用
  • 在 C# 中向图表添加水平线

    我正在使用一个System Windows Forms DataVisualization Chart绘制一些 x y 散点数据 如下所示 chart1 Series Series2 Points AddXY stringX doubleY
  • 如何使用 Gradle 构建在 Android Studio 中导入 com.google.android.gms.*?

    我已按照此处描述的程序进行操作 Setup我点击了 与 Gradle 同步项目 小按钮 Gradle 和 Android Studioseem找到所有内容 但我实际上无法使用 gms 代码 如果我尝试导入 我将获得 com google a
  • 如何获取 mscorlib.ni.lib (.Net Framework 3.5) 的 PDB 文件

    经过大量搜索后 我仍然无法找到该问题的解决方案 我有一个 mdmp 文件 调用堆栈显示它正在使用 mscorlib ni dll 因此 要获取函数信息 我需要获取其 pdb 文件 mscorlib ni dll的版本是2 0 50727 3
  • FullCalendar - 图像作为事件

    希望使用完整日历并将图像包含为事件和可拖动 简而言之 很想看看这个例子如何https fullcalendar io js fullcalendar 3 0 1 demos external dragging html将使用小缩略图而不是文
  • JAVA 中带有 JSON 字符串的 HTTP POST 请求

    我必须使用我已经生成的 JSON 字符串发出 http Post 请求 我尝试了两种不同的方法 1 HttpURLConnection 2 HttpClient 但我从他们两个那里得到了同样的 不想要的 结果 到目前为止我的代码HttpUR
  • TextEncodings.Base64Url.Decode 与 Convert.FromBase64String

    我正在致力于创建一种生成 JWT 令牌的方法 该方法的一部分从我的 web config 中读取一个值 该值作为 秘密 用于生成用于创建 JWT 令牌签名的哈希值
  • 删除 Firestore 集合中的所有文档

    我正在寻找一种方法来清除整个集合 我看到有一个批量更新选项 但这需要我知道集合中的所有文档 ID 我正在寻找一种方法来简单地删除集合中的每个文档 Edit 下面的答案是正确的 我使用了以下内容 func delete collection
  • mongodb打开连接问题

    我的 mongo 控制台中有以下日志 Tue Jul 23 17 20 01 301 initandlisten waiting for connections on port 27017 Tue Jul 23 17 20 01 401 w