我正在将一个现有的应用程序从Spring MVC传统模型迁移到Spring Reactive。我的第一个重构让我用这段代码:
return Mono.fromSupplier(() -> visitRequestDao.findById(requestId).get())
.map(request -> request.approve())
.map(request -> ResponseEntity.ok(listOfPendingVisitRequest(owner)));
执行端点后,我注意到我的实体没有更改状态。作为一个Hibernate用户,我知道当我加载一些对象时,所应用的任何更改都将在提交后反映在数据库中。我的猜测是事件是在另一个线程中执行的。我稍微更改了代码。
return Mono.fromSupplier(() -> visitRequestDao.findById(requestId).get())
.map(request -> transactionalContext.execute(() -> request.approve()))
.map(request -> ResponseEntity.ok(listOfPendingVisitRequest(owner)))
创建了一个类TransactionalContext
并将其标记为事务性。所以,现在我知道,无论何时调用它的方法,都将启动一个新的事务或使用当前的事务。这是正确的方法吗?有没有解决方案?