MongoDB在java中使用时,客户端连接参数说明;
此说明居于mongo驱动包:mongodb-driver-3.4.2,官方驱动下载地址:http://central.maven.org/maven2/org/mongodb/mongo-java-driver/
缘起一次mongo连接,客户端连接不会释放;
客户端不会释放带来的问题是:
1、如果在某次请求过多时,开启的线程过多,导致连接猛增,快速打满连接池,建立的连接不会释放;
2、大量不用的连接存放在连接池中,占用mongo连接资源;
经排查,mongo连接池中,有一个参数:maxIdleTimeMS未设置,在没有设置此参数时,mongo驱动默认为0,如果为0,则连接池永远不会释放,不管该连接是否会被使用。
源码:在ConnectionString类中,参考官方说明:https://docs.mongodb.com/manual/reference/connection-string/#connections-connection-options
通过源码截图可以看出,参数名称不区分大小写。
说明(部分):
类型 | 参数名 | 说明 |
---|---|---|
连接选项 | ssl | 连接是否使用SSL进行连接,默认根据url来 |
connectTimeoutMS | 连接超时时间,单位为毫秒,默认为0,永不超时 | |
socketTimeoutMS | 发送或者接收socket的超时时间,单位为毫秒,默认为0,永不超时 | |
连接池 | maxPoolSize | 连接池最大数,默认值为100,主要是参考客户端应用个数以及mongo的服务器端设置的最大连接处来评估每个客户端最大开启的数量。 |
minPoolSize | 连接池中最小连接存活数,默认为0,启动时,初始化的最小连接数。 | |
maxIdleTimeMS | 一个连接在池中的最大空闲时间,如果空闲超过此时间,则会被移除连接池,同时关闭连接,释放连接资源; 默认为0,永不释放。 单位为毫秒。 | |
maxLifeTimeMS | 最大有效存活时间,默认为0,永远存活 | |
waitQueueMultiple | 等待最大连接数,与maxPoolSize合用,传递给驱动中的参数 threadsAllowedToBlockForConnectionMultiplier 默认为5 | |
waitQueueTimeoutMS | 等待获取连接最大超时时间,默认为0,永不超时。 | |