当前位置: 首页 > 知识库问答 >
问题:

用于连接池(Hikari)重用的JDBC连接生命周期

年文柏
2023-03-14

Hikari:2.4.7

PostgreSQL JDBC驱动程序:9.4-1201-jdbc41

我试图理解必须对java.sql做些什么。对象以使其在连接池中再次可用?

我刚刚将连接池引入了一个多线程应用程序,该应用程序以前使用每个SQL语句建立/拆除连接。

在介绍Hikari之后,我注意到,一旦我点击max umPoolsize,此后每次尝试HikariDataSource.getConnection都会由于连接超时而失败。所以看起来我没有以某种方式“释放”这个连接。

连接对象的典型用法是:

# omits Exception handling, parameter substitution, result evaluation. 
PreparedStatement preparedStatement = hikariDataSource.getConnection().prepareStatement(sql);
preparedStatement.executeQuery();
preparedStatement.close();

是否期望在此连接上执行任何其他操作以使其符合在连接池中重用的条件?

自动提交打开。Connection.close(),除非在Hikari提供时做一些特别的事情,否则似乎正是我想要避免的事情。

共有1个答案

秦浩漫
2023-03-14

我不知道Hikari的具体情况,但是对于您从连接池中取出的每个连接,您必须在完成连接后返回该连接。

通常,这是使用连接来完成的。close()-池发出一个包装函数,其中,close()不会物理关闭连接,只返回连接。

因此,您的代码应该如下所示:

Connection con = hikariDataSource.getConnection();
PreparedStatement preparedStatement = con.prepareStatement(sql);
preparedStatement.executeQuery();
preparedStatement.close();
con.close(); // this returns the connection to the pool

当然,应该在最后块中调用两个关闭()方法。

 类似资料:
  • 我的服务器上有一个Spring启动项目。我有时会遇到“Hikari池连接不可用”错误。我想不出原因。我看起来有很多这样的问题。一些人建议关闭一些@交易。但是,在我的应用程序中,我没有使用任何@Transactional注释。以下是我的Hikari池配置: 当我检查我的卡塔琳娜。在日志文件外,我注意到活动连接数有时会增加。例如,昨天没有活动的连接。所有连接都处于空闲状态。现在池中有2个活动连接。是否

  • 我们有一个spring-boot应用程序,它使用嵌入式tomcat进行部署,并使用MySQL后端的默认tomcat-jdbc连接池,而没有为MySQL或tomcat端定制。 该应用程序有一些调度程序,它们主要在一天中的特定时间运行,即在昨天的最后一次cron运行和今天的第一次cron运行之间,有超过9个小时的间隙。然而,无论何时cron在早期运行,它都从未遇到过空闲连接问题。 现在我们看到一条错误

  • 我有一个问题,在通过tomcat web应用程序应用户请求重置MySQL数据库后,我会收到tomcat异常。到目前为止,我已尝试将其分解为设置、问题和我的分析,以帮助任何试图阅读本文的人。 重置基本上包括从java代码调用bash脚本以: 删除根mysql用户密码 加载数据库的旧版本 在上面运行一些脚本 恢复所有密码 这是一个用户启动的过程,通常将数据库恢复到以前的状态,但它也用于从另一个系统导入

  • 我正在尝试使用google cloud sql和云endpoint开发一个应用程序,从google cloud sql文档中我发现google loud sql的连接器不提供任何连接池机制,我尝试在线搜索以获得任何可能的教程或文档,这些教程或文档提供了池机制,但没有结果,google文档只是指出,您应该在finally块中关闭连接,而不需要任何连接池配置。我还遇到了BoneCp、TomcatDbC

  • Tomcat在使用后不释放连接的原因可能是什么? 这是我的配置