3

看来JDBC Spec并没有详细说明alive or idle connections数据源连接池中的准确含义。它只是实现特定的吗?DBCP2HikariCP如何实际检查连接状态?

没有活动事务的连接会在下面标记为空闲吗?

// assuming auto commit disabled already

Connection connection = dataSource.getConnection(); // idle?
/* issue some JDBC SQL statements */ // active?
connection.commit(); /* or rollback */ //idle again?
4

2 回答 2

3

您应该区分空闲/借用的池连接(如 Nathan 所讨论的) 有效/无效连接。

这些属性是正交的,但通常有一个属性,例如Tomcat连接池的testOnBorrow,当它设置时可以强制借用的连接是有效的(即能够执行验证查询)。

还可以设置时间限制以从连接池中删除长时间空闲的连接(例如minEvictableIdleTimeMillis)。类似的对于删除放弃的连接也是有效的,即那些被“忘记”并被应用程序返回到池中的连接。( removeAbandonedTimeout )。

你是对的,它都是特定于实现的。

于 2015-09-28T16:30:47.687 回答
2

“空闲”表示连接当前没有被借出。(正如 Mark Rotteveel 在评论中所说,这与 JDBC 规范无关,因为 JDBC 并不专门处理连接池。)“活动”表示连接有效并且可以使用。很容易判断某些东西是否空闲,因为池明确地跟踪它,并且更难知道它是否有效,因为它是一个网络连接并且可能随时失败。

连接池通过在连接上运行一些测试 sql 来检查连接的状态,其中 sql 通常通过配置属性提供,例如“从双重选择 1”。

于 2015-09-28T13:16:48.353 回答