1. R2DBC 的事务(TransactionalDatabaseClient)边界
R2DBC 的事务(TransactionalDatabaseClient)边界是怎样的?如何确保事务覆盖同一连接?
- TransactionalDatabaseClient 的事务边界
- 事务与连接的绑定
- beginTransaction/commit/rollback 的使用
R2DBC 的 TransactionalDatabaseClient(或 DatabaseClient.inTransaction)提供事务支持,但事务边界限定在"同一响应式连接"上:事务内的所有操作必须复用同一连接,事务开始用 beginTransaction,提交用 commitTransaction,回滚用 rollbackTransaction。inTransaction 会为事务内的操作绑定一个连接,保证事务的原子性。由于事务绑定连接,事务内不能切换连接(不能跨数据源、不能跨远程服务),且事务方法需在响应式链上执行,不能阻塞或切换线程。事务边界 = 同一连接上的操作序列。跨连接或跨服务的一致性需用分布式事务方案(Saga/Outbox)。理解事务边界对正确设计响应式数据库操作至关重要。
R2DBC 事务的核心边界是"单连接"。beginTransaction/commit/rollback 在同一连接上执行。跨连接/跨服务无法用本地事务,需分布式方案。响应式事务链上操作保证原子性。