2

我有一个具有 data-r2dbc 依赖项的 Spring Boot 应用程序。我使用 PostgreSQL 作为数据库。
所以我已经有了以下依赖项(gradle notation):

  • org.springframework.boot:spring-boot-starter-data-r2dbc:2.3.5.RELEASE
  • io.r2dbc:r2dbc-postgresql

我需要为 R2DBC 连接启用连接池。不幸的是,我找不到任何详尽的手册来做到这一点。

根据这个相当过时的发行说明,我还必须添加io.r2dbc:r2dbc-pool 并使用spring.r2dbc.pool.*属性来配置池。

此外,根据这个参考,我不需要手动打开池,因为如果r2dbc-pool在类路径上找到 SB,它将启用它。

够了还是我错过了什么?

4

2 回答 2

6

回答我自己的问题。

TLDR

  • 默认情况下启用连接池org.springframework.boot:spring-boot-starter-data-r2dbc:2.3.5.RELEASE就足够了
  • 无需io.r2dbc:r2dbc-postgresql显式添加
  • :pool:在这种情况下无需输入 URL

一些详细的发现。似乎有两种方法可以启用连接池:

  1. :pool:驱动程序块放入 URL,然后io.r2dbc.pool.PoolingConnectionFactoryProvider#create将负责创建连接池。这在https://github.com/r2dbc/r2dbc-pool#getting-started中有描述
  2. 在配置中没有spring.r2dbc.pool.enabled=false(意味着true默认情况下它的缺失被解释为)。这样,连接池将由org.springframework.boot.autoconfigure.r2dbc.ConnectionFactoryConfigurations.Pool#connectionFactory. 我不确定,但它看起来像是对库特定:pool:选项的通用 Spring Boot 配置样式覆盖。

此选项是独立的并且部分重叠,第二个优先。

第二个组件还评估:pool:URL 中是否存在 (请参阅 参考资料org.springframework.boot.autoconfigure.r2dbc.ConnectionFactoryConfigurations.PooledConnectionFactoryCondition),如果找到,它将连接池的创建委托给第一个组件。

还有一个特殊的结论 -如果URL 中spring.r2dbc.pool.enabled=false有一个,那么明确导致创建连接池。:pool:因此,禁用池的唯一方法是同时在 URL 中具有spring.r2dbc.pool.enabled=false和省略。:pool:

于 2020-12-16T09:20:19.983 回答
0

下面的代码对我有用

String url = "r2dbc:postgres://user:password@hostname:5432/testdb?ApplicationName=myapp";
ConnectionFactory ret= ConnectionFactories.get(url);

ConnectionPoolConfiguration poolConfiguration = ConnectionPoolConfiguration.builder(ret)
                .initialSize(5)                        .maxSize(10).maxIdleTime(Duration.ofMinutes(5)).build();

ConnectionPool pool = new ConnectionPool(poolConfiguration);

return pool;
于 2021-12-10T20:59:13.287 回答