java - 我应该保持数据库连接打开以处理每个请求吗?以及如何以正确的方式做到这一点
问题描述
例如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
解决方案
查找“连接池”,这是让您的请求可以使用的连接“池”保持打开状态的想法。如果它们空闲一段时间,您可以将它们编程为关闭;相反,如果它们过载,您可以对连接池进行编程以打开更多连接以适应负载。它们可以通过其他方式进行调整/配置。
推荐阅读
- r - 如何在 R 中使用 Ibrokers 一次交易多个股票
- php - 每次附加 file_put_contents 后,Filesize 无法获取实际文件大小
- csv - 处理大文件时出现 Awk 4.1.4 错误
- php - 如何在另一个 php 脚本的后台运行 php 脚本?
- macos - MAC OS 项目从 Fabric 升级到 FirebaseCrashlytics(没有 CoCOPod)
- unicode - 浏览器无法识别 UTF8
- c - 我的 C 程序陷入无限循环
- android - 如何在带有 ItemViewType 的适配器中使用 ViewBinding
- applescript - AppleScript - 语法错误:预期的行尾但找到“””
- python-3.x - 使用 numpy 数组比较两个相似的 PIL 图像不起作用