Ray*_*ang 3 spring-data-r2dbc r2dbc
最近似乎已经实现了对事务流的支持,但由于它的新颖性,代码示例并不多。
有人可以展示一个事务流的例子,它执行一系列数据库插入,然后在成功时返回一些值,但在插入之间有一个中游检查点来测试某些条件,并可能回滚事务并根据检查点返回不同的值结果?
反应式事务与命令式事务遵循相同的模式:
这里需要注意的几个方面: 连接总是与反应序列的具体化相关联。我们从Thread绑定到命令式编程中的执行的绑定连接中所知道的转化为反应式编程中的物化。
因此,每个(并发)执行都会分配一个连接。
Spring Data R2DBC 不支持保存点。看看下面的代码示例,它说明了提交还是回滚的决定:
DatabaseClient databaseClient = DatabaseClient.create(connectionFactory);
TransactionalOperator transactionalOperator = TransactionalOperator
.create(new R2dbcTransactionManager(connectionFactory));
transactionalOperator.execute(tx -> {
Mono<Void> insert = databaseClient.execute("INSERT INTO legoset VALUES(…)")
.then();
Mono<Long> select = databaseClient.execute("SELECT COUNT(*) FROM legoset")
.as(Long.class)
.fetch()
.first();
return insert.then(select.handle((count, sink) -> {
if(count > 10) {
tx.setRollbackOnly();
}
}));
}).as(StepVerifier::create).verifyComplete();
Run Code Online (Sandbox Code Playgroud)
这里值得注意的方面是:
TransactionalOperator而不是@Transactional..handle()调用中的代码setRollbackOnly()。使用@Transactional,您通常会使用异常来表示回滚条件。
| 归档时间: |
|
| 查看次数: |
1920 次 |
| 最近记录: |