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

使用HikariDataSource的jOOQ连接池释放模式

方飞白
2023-03-14

这是释放回池的连接的正确方法吗

HikariDataSource ds = ...;
final Connection sqlConn = ds.getConnection();
final DSLContext ctx = DSL.using(sqlConn, SQLDialect.DERBY);
  // DO JOOQ QUERIES HERE       
ds.evictConnection(sqlConn);

只是想确保这是正确的,因为如果我不调用连接,我的连接不会被重新循环

共有2个答案

荣波
2023-03-14

不,只需调用sqlConn。close()将释放回池的连接。

当HikariCP或任何池从getConnection()返回连接时,它实际返回的是一个代理对象,该代理对象拦截close()调用并返回到池的连接,而不是实际关闭它。

executeconnection()是一种很少使用的方法。这是一种强制关闭与数据库的连接并从池中退出连接的方法。

耿弘阔
2023-03-14

除了brettw的回答(它解释了close()executeconnection()相比的语义)之外,我想说您也可以简单地让jOOQ直接包装您的数据源

HikariDataSource ds = ...;
final DSLContext ctx = DSL.using(ds, SQLDialect.DERBY);
  // DO JOOQ QUERIES HERE       

jOOQ将在内部使用数据源连接提供程序,它负责在每次查询后关闭每个连接。

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

  • 当我使用带有固定连接提供者的TCP客户端时,我不能重用连接。 他们使连接超过maxConnection变量。 这是我写的。 即使我使用10个maxConnection,比如“ConnectionProvider”。固定(“测试”,10)”,有22个空闲连接。天啊 //NettyClient.java //NettyClientTest。Java语言 14:55:27.397[reactor-tcp

  • 我已经按照这里的示例中所述配置了TcpClient。我试图使以下代码在服务器意外关闭连接的情况下具有弹性: 在这种情况下,我希望方法“getConnectionFromPool”能够从池中检索连接,或者如果没有可用的连接,则打开一个新连接。 注意到后。connect()最终服从于ConnectionProvider。acquire(),我尝试使用tcpClient。connect(),但有必要更改

  • 我正在尝试按照本教程实现nodejs mysql数据库。我知道 查询()是Pool.GetConnection()+Connection.Query()+Connection.Release()的快捷方式。 在本文中,数据库配置为: 这是可以用作: 但是,我真的不明白 如果使用pool会自动释放连接,为什么我们需要这样做呢?

  • 我使用的是spring-webflux-5.2.8。释放,此操作“正常”: 返回错误时,不会出现任何问题,因为连接已被破坏,并且不会放回连接池: 调试r.n.resources。PooledConnectionProvider-[id:0xa23f78ad,L:/127.0.0.1:7524!R:localhost/127.0.0.1:8443]通道已关闭,现在有0个活动连接和0个非活动连接 但当

  • Hibernate 关于 JDBC 连接管理的旧(2.x)行为是,Session 在第一次需要的时候获取一个连接,在 session 关闭之前一直会持有这个连接。Hibernate 引入了连接释放的概念,来告诉 session 如何处理它的 JDBC 连接。注意,下面的讨论只适用于采用配置 ConnectionProvider 来提供连接的情况,用户自己提供的连接与这里的讨论无关。通过 org.h