连接重用和事务关系

问题描述

R2DBC如何实现事务处理。

据我所知,JDBC对一个事务使用一个连接。因此,在Spring MVC中,我们具有以下映射:1请求:1线程:1事务:1连接。

带R2DBC的Webflux中的映射是什么? Webflux是被动的,因此当我们打开一个事务时,它会使用一个连接直到事务结束吗?如果是这样,则事务就像是阻塞操作,因为在事务处于活动状态时,没有其他事务可以重用Spring Webflux中的连接。

比方说,我们在R2DBC中定义了10个连接,而10个Webflux请求打开了10个长事务。以下所有Webflux请求是否会等待这10个事务之一结束,还是多个Webflux请求(带有事务)可以并行使用一个连接?

解决方法

R2DBC每个连接仅支持单个事务。据我所知,主要原因是许多数据库系统每个连接仅支持单个事务,因此无法在单个连接上多路复用事务。