spring Sping Boot jooq如何在同一个grpc调用中使用相同的连接?

anauzrmj  于 2023-06-21  发布在  Spring
关注(0)|答案(1)|浏览(94)

我们使用的是hikari cp,我发现在同一个grpc调用中多次重复调用getConnection和close(将连接返回到连接池)。
如果连接受到限制并且它会影响性能,则getConnection将太慢。
它会使一些调用性能太慢。第99章可怕的电话
我是否需要将调用标记为transactional(只读),以优化查询的重复getConnection调用?或者也许我可以使用某种grpc服务器拦截器来做这样的技巧?
谢谢

xv8emn3q

xv8emn3q1#

jOOQ的ConnectionProvider是这样设计的:

  • 在每次查询之前,调用ConnectionProvider.acquire():Connection
  • 每次查询后,都会调用ConnectionProvider.release(Connection)

Package JDBC DataSource的默认实现将有效地调用:

  • DataSource::getConnection
  • Connection::close

这是jOOQ查询最合理的默认设置,它对应用程序、事务、生命周期等一无所知。
在Spring和jOOQ中,一旦启动事务,Connection就变成线程绑定的,这意味着不是为每个查询获取新的连接,而是为每个查询提供相同的连接(这是代码事务性的先决条件)。
因此,实际上,使代码具有事务性将防止为每个jOOQ查询重新获取新连接。无论您使用的是Spring的事务还是jOOQ的事务。他们都是这样工作的。作为第三种选择,您还可以手动管理JDBC Connection生命周期,并为jOOQ提供Connection而不是DataSource
This is all documented here as well

相关问题