我有一个具有数据-r2dbc依赖关系的Spring应用程序。我使用PostgreSQL作为DB。
因此,我已经有了以下依赖项(gradle表示法):
org.springframework.boot:spring-boot-starter-data-r2dbc:2.3.5.RELEASEio.r2dbc:r2dbc-postgresql我需要为R2DBC连接启用连接池。不幸的是,我找不到任何详尽的手册来这样做。
根据这个非常过时的发布说明,我还必须添加io.r2dbc:r2dbc-pool并使用spring.r2dbc.pool.*属性来配置池。
而且,根据本参考,我不需要手动打开池,因为如果在类路径上找到r2dbc-pool,SB将启用它。
够了吗还是我错过了什么?
发布于 2020-12-16 09:20:19
回答我自己的问题。
TLDR
org.springframework.boot:spring-boot-starter-data-r2dbc:2.3.5.RELEASE就足以默认启用连接池。io.r2dbc:r2dbc-postgresql:pool:放在URL中一些详细的发现。似乎有两种方法可以启用连接池:
:pool:驱动程序块放入URL,然后io.r2dbc.pool.PoolingConnectionFactoryProvider#create将负责创建一个连接池。这在https://github.com/r2dbc/r2dbc-pool#getting-started中有描述。spring.r2dbc.pool.enabled=false (这意味着它的缺席在默认情况下被解释为true )。这样,org.springframework.boot.autoconfigure.r2dbc.ConnectionFactoryConfigurations.Pool#connectionFactory将创建一个连接池。我不确定,但它看起来像是对特定于库的:pool:选项的一种通用的Spring配置样式覆盖。这个选项是独立的,部分重叠,第二个优先。
第二个组件也评估:pool:在URL中的存在(请参见org.springframework.boot.autoconfigure.r2dbc.ConnectionFactoryConfigurations.PooledConnectionFactoryCondition),如果发现它,则将创建连接池委托给第一个。
还有一个奇怪的结论--如果URL中有一个spring.r2dbc.pool.enabled=false,那么使用显式的:pool:就会创建一个连接池。因此,禁用池的唯一方法是拥有spring.r2dbc.pool.enabled=false,同时在:pool:中省略:pool:。
发布于 2021-12-10 20:59:13
下面的代码适用于我
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;https://stackoverflow.com/questions/65303082
复制相似问题