1 - Configuring ReactiveTransactionManager
@Configuration
public class TransactionConfig {
@Bean
public ReactiveTransactionManager reactiveTransactionManager() {
// see TransactionManager
}
}
see: Java - Spring - TransactionManager (PlatformTransactionManager - ReactiveTransactionManager)
2 - Configuring & Using TransactionalOperator
public class SimpleService {
private final TransactionalOperator transactionalOperator;
public SimpleService(ReactiveTransactionManager transactionManager) {
// Method 1
this.transactionOperator = TransactionalOperator.create(transactionManager);
// Method 2
DefaultTransactionDefinition definition = new DefaultTransactionDefinition();
// the transaction settings can be set here explicitly if so desired
definition.setIsolationLevel(TransactionDefinition.ISOLATION_READ_UNCOMMITTED);
definition.setTimeout(30); // 30 seconds
// and so forth...
this.transactionalOperator = TransactionalOperator.create(transactionManager, definition);
}
public Mono<Object> someServiceMethod() {
// the code in this method runs in a transactional context
Mono<Object> update = updateOperation1();
return update.then(resultOfUpdateOperation2).as(transactionalOperator::transactional);
}
}