连接池 SimpleDBConnectionPool
Java API 自 2.00.11.1 版本起提供 SimpleDBConnectionPool
连接池,以此对连接进行管理和重用。
在使用时,先通过 SimpleDBConnectionPoolConfig
设置连接池的具体参数,然后在构造连接池时,将 SimpleDBConnectionPoolConfig
作为 SimpleDBConnectionPool
的配置参数。SimpleDBConnectionPool
将根据传递的参数进行解析、初始化连接等操作。连接池创建成功后,用户可以通过 getConnection
方法获取一个连接进行使用。使用完毕后,用户可通过 DBConnection.close()
释放连接。连接重回连接池后属于闲置状态,之后可以再次被获取使用。
使用说明
SimpleDBConnectionPoolConfig
仅可通过 setXxx
方法来配置参数,示例如下:
SimpleDBConnectionPoolConfig config = new SimpleDBConnectionPoolConfig();
config.setHostName("1sss");
config.setPort(PORT);
config.setUserId("admin");
config.setPassword("123456");
config.setminimumPoolSize(6);
config.setEnableHighAvailability(false);
目前 SimpleDBConnectionPoolConfig
支持的参数如下
hostName IP,默认为 localhost。
port 端口,默认为 8848。
userId 用户名,默认为””。
password 密码,默认为””。用户名和密码仅填写其中一个,创建连接不登录;用户名和密码填写正确,创建连接且登录;用户名和密码填写错误,创建连接失败。
minimumPoolSize 表示连接池中最小连接数,正整数,默认值为 5。
- 若填写 minimumPoolSize ,则以 minimumPoolSize 值为准来作为初始化连接数。
- 若两个参数都不填写,则取 minimumPoolSize 的默认值 5 来作为初始化连接数。
maximumPoolSize 表示连接池中允许同时存在的最大连接数,正整数,默认值为 5。该参数用来设置连接池的上限,以防止数据库连接数过多而导致可用连接数耗尽。
注意:maximumPoolSize 必须大于等于 minimumPoolSize。
idleTimeout 表示连接在连接池中保持空闲状态的最长时间,超时后将被回收,即连接被关闭。该参数以毫秒为单位,默认值为 600000(即 10 分钟);最小值为 10000(即 10 秒),若小于该值则会抛异常。
空闲连接回收机制说明:针对当前连接池中 minimumPoolSize 数量之外的连接,若其处于空闲状态,则在超过 idleTimeout 时间后将被回收关闭。
initialPoolSize 表示连接池的初始连接数,默认为 5。
兼容性说明:自 3.00.1.1 版本起,该参数不再推荐使用,请使用 minimumPoolSize、maximumPoolSize 代替,以进行连接池的初始化。若同时设置 initialPoolSize 与 minimumPoolSize、maximumPoolSize,则以 minimumPoolSize、maximumPoolSize 的值为准。
initialScript 表示初始化的脚本,默认为空。
compress 表示是否在下载时对数据进行压缩,默认值为 false。该模式适用于大数据量的查询。压缩数据后再传输,这可以节省网络带宽,但会增加 DolphinDB、API 的计算量。
useSSL 表示是否使用 SSL 连接,默认值为 false。注意:若要开启 SSL 连接,服务器端的配置文件(如果是单节点为 dolphindb.cfg,如果是集群为 cluster.cfg)须同时配置功能参数 enableHTTPS=true。
usePython 表示是否开启 Python 解析,默认值为 false。
loadBalance 表示是否开启负载均衡,默认为 false,为 true 时注意:
- 如果未指定highAvailabilitySites,Java API 会对 server 集群的所有节点采取轮询策略的负载均衡。
- 如果指定了highAvailabilitySites ,Java API 将对 highAvailabilitySites 数组中的连接节点执行轮询策略的负载均衡。
enableHighAvailability 表示是否开启高可用,默认为 false。
highAvailabilitySites 表示开启高可用情况下指定填入的主机名和端口号数组,默认为 null。
tryReconnectNums 表示连接池中每个连接的重连尝试次数,int 类型。使用方式如下:
- 若不开启高可用,将针对单连接默认开启有限次重连。若不填写该参数,则默认是无限重连。
- 当开启 enableHighAvailability 高可用参数时,
- 若指定该参数,连接将在断开后遍历高可用范围内的每个节点进行有限次重连。注意:一次遍历中每个节点只会被重连一次,最多进行 tryReconnectNums 次遍历尝试。
- 若不指定该参数,则默认是无限次重连。
相关方法
方法名 | 详情 |
---|---|
SimpleDBConnectionPool(simpleDBConnectionPoolConfig) | 构造方法 |
DBConnection getConnection() | 从连接池中获取一个连接 |
close() | 关闭连接池 |
isClosed() | 查看连接池是否关闭 |
getActiveConnectionsCount() | 获取当前使用中的连接数 |
getIdleConnectionsCount() | 获取当前空闲的连接数 |
getTotalConnectionsCount() | 获取总连接数 |
DBConnection.close() | 释放当前连接 |
getConnection() | 获取一个空闲连接 |
manualCleanupIdleConnections() | 关闭空闲连接 |
注意:该处的 DBConnection.close()
方法区别于 DBConnection
类中关闭当前会话的功能,此处仅用于将使用 getConnection
获取的连接释放到连接池。
使用示例
// 设置连接池参数
SimpleDBConnectionPoolConfig config = new SimpleDBConnectionPoolConfig();
config.setHostName("1sss");
config.setPort(PORT);
config.setUserId("admin");
config.setPassword("123456");
config.setInitialPoolSize(5);
config.setEnableHighAvailability(false);
// 初始化连接池
SimpleDBConnectionPool pool = new SimpleDBConnectionPool(config);
// 从连接池中获取一个连接
DBConnection conn = pool.getConnection();
conn.run("..."); // 执行脚本
// 释放当前连接
conn.close();
// 获取当前使用中的连接数
int activeConns = pool.getActiveConnectionsCount();
// 获取当前空闲的连接数
int idleConns = pool.getIdleConnectionsCount();
机制介绍
(1) 空闲连接获取机制
若当前连接池:
- 有空闲连接,则返回一个空闲连接。
- 无空闲连接、且池中总连接数大于 minimumPoolSize 且小于 maximumPoolSize,则创建一个新的连接并返回。
- 无空闲连接、且池中总连接数达到 maximumPoolSize,则会抛出异常。
(2) 空闲连接释放机制
调用 close()
方法释放连接,则状态将由使用状态变为空闲状态。
(3) 空闲连接回收机制
区别于释放连接,回收连接即是将连接由空闲状态变为关闭状态。Java API 提供自动和手动两种回收机制,以下分别进行详细说明。
连接池内部的自动回收机制:
在回收连接之前,连接池会检查当前的连接数量。如果当前池中的连接数量:
- 大于 minimumPoolSize,则多余的空闲连接将被回收。
- 等于或少于 minimumIdle,即使连接的空闲时间已经超过了 idleTimeout,连接也不会被回收。
用户手动回收机制:
Java API 提供手动关闭空闲连接的方法 manualCleanupIdleConnections()
。在回收连接之前,连接池会检查当前的连接数量。如果连接数量大于 minimumPoolSize,则当前池中多余的空闲连接将被回收。
注意,用户手动回收的方式,不受 idleTimeout 参数的影响。