首页 > 解决方案 > 我应该保持数据库连接打开以处理每个请求吗?以及如何以正确的方式做到这一点

问题描述

例如MongoDB等数据库。我怀疑没有必要为每个请求打开和关闭连接。所以我尝试保持连接来处理这样的每个请求。

public class MongoUtils {
private static final String connectionString = "mongodb://localhost:27017";
private static final MongoClient client;

static {
    client = MongoClients.create(connectionString);
}

public static MongoClient getConnection(){
    return client;
}

}

但也许我在某处做错了。我不知道为什么它会创建第一个连接并将其留在那里,然后它会创建第二个连接并使用它来处理我的数据库请求。这是日志

2018-10-25 11:37:36 INFO AnnotationMBeanExporter:433 - 在启动时为 JMX 公开注册 bean
2018-10-25 11:37:36 INFO Http11NioProtocol:180 - 启动 ProtocolHandler ["http-nio-8808"]
2018-10-25 11:37:36 INFO NioSelectorPool:180 - 使用共享选择器进行 servlet 写入/读取
2018-10-25 11:37:36 信息 TomcatWebServer:206 - Tomcat 在端口上启动:8808 (http),上下文路径为“/api”
2018-10-25 11:37:36 INFO Backend:59 - 在 3.251 秒内启动后端(JVM 运行 6.935)
2018-10-25 11:37:56 INFO [/api]:180 - 初始化 Spring FrameworkServlet 'dispatcherServlet'
2018-10-25 11:37:56 信息 DispatcherServlet:494 - FrameworkServlet 'dispatcherServlet':初始化开始
2018-10-25 11:37:56 信息 DispatcherServlet:509 - FrameworkServlet 'dispatcherServlet':初始化在 39 毫秒内完成
2018-10-25 11:37:56 INFO cluster:71 - Cluster created with settings {hosts=[10.184.153.232:27017], mode=SINGLE, requiredClusterType=UNKNOWN, serverSelectionTimeout='30000 ms', maxWaitQueueSize=500}
2018-10-25 11:37:56 信息集群:71 - 集群描述尚不可用。在超时前等待 30000 毫秒
2018-10-25 11:37:56 INFO 连接:71 - 打开连接 [connectionId{localValue:1, serverValue:27}] 到 10.184.153.232:27017
2018-10-25 11:37:56 INFO cluster:71 - 监控线程成功连接到服务器,描述为 ServerDescription{address=10.184.153.232:27017, type=STANDALONE, state=CONNECTED, ok=true, version=ServerVersion{versionList =[4, 0, 3]},minWireVersion=0,maxWireVersion=7,maxDocumentSize=16777216,logicalSessionTimeoutMinutes=30,roundTripTimeNanos=3393851}
2018-10-25 11:37:56 INFO connection:71 - 打开连接 [connectionId{localValue:2, serverValue:28}] 到 10.184.153.232:27017

标签: javamongodbconnection

解决方案


查找“连接池”,这是让您的请求可以使用的连接“池”保持打开状态的想法。如果它们空闲一段时间,您可以将它们编程为关闭;相反,如果它们过载,您可以对连接池进行编程以打开更多连接以适应负载。它们可以通过其他方式进行调整/配置。


推荐阅读