我有一个程序,使用单线程工作流程对数据库执行频繁请求。请求需要在彼此相隔一秒或更短的时间内获得连接,但是在打开新连接之前应始终关闭一个连接。
但是,随着时间的推移,我的调试显示连接速度相当快。似乎连接开始成倍增加,并最终达到程序挂起的点,因为连接池的最大值(当前使用的是BoneCP)已被填充。我将最大值设置为15,但是当它处于默认数字时它具有类似的行为(我相信8)。
我使用try-with-resource语句(类似于下面的语句)来关闭连接。
//Connection example
//Connection pool is configured.
DataSource source = new DataSource();
try (Connection con = source.getConnection();
PreparedStatement stmt = con.prepareStatement(query) {
//Do SQL stuff
} catch (SQLException e) {
//Handle Exception
}
如果我理解尝试使用资源,则应自动关闭连接,并将其返回池中。由于这不起作用,我尝试添加con.close()
语句以尝试更好地处理连接。这在数量上似乎有所帮助,但我不确定它在现实中做了什么。
为什么要创建如此多的连接,以及如何更好地管理我的连接,以便我不创建这么多?