DatabaseClient
in combination with TransactionalOperator
.@Deprecated public interface TransactionalDatabaseClient extends DatabaseClient
DatabaseClient
that participates in an ongoing transaction if the subscription happens within a hosted
transaction. Alternatively, transactions can be started and cleaned up using beginTransaction()
and
commitTransaction()
.
Transactional resources are bound to ReactiveTransactionSynchronization
through nested
TransactionContext
enabling nested (parallel) transactions. The simplemost approach to use transactions is by
using inTransaction(Function)
which will start a transaction and commit it on successful termination. The
callback allows execution of multiple statements within the same transaction.
FluxAlternatively, transactions can be controlled by usingtransactionalFlux = databaseClient.inTransaction(db -> { return db.execute().sql("INSERT INTO person (id, firstname, lastname) VALUES(:id, :firstname, :lastname)") // .bind("id", 1) // .bind("firstname", "Walter") // .bind("lastname", "White") // .fetch().rowsUpdated(); });
beginTransaction()
and commitTransaction()
methods. This approach requires enabling of transaction
synchronization
for the transactional operation.
Monomono = databaseClient.beginTransaction() .then(databaseClient.execute() .sql("INSERT INTO person (id, firstname, lastname) VALUES(:id, :firstname, :lastname)") // .bind("id", 1) // .bind("firstname", "Walter") // .bind("lastname", "White") // .fetch().rowsUpdated()) .then(databaseClient.commitTransaction()); Mono transactionalMono = databaseClient.enableTransactionSynchronization(mono);
This DatabaseClient
can be safely used without transaction synchronization to invoke database functionality
in auto-commit transactions.
Modifier and Type | Interface and Description |
---|---|
static interface |
TransactionalDatabaseClient.Builder
Deprecated.
A mutable builder for creating a
TransactionalDatabaseClient . |
DatabaseClient.BindSpec<S extends DatabaseClient.BindSpec<S>>, DatabaseClient.DeleteFromSpec, DatabaseClient.DeleteMatchingSpec, DatabaseClient.DeleteSpec, DatabaseClient.GenericExecuteSpec, DatabaseClient.GenericInsertSpec<T>, DatabaseClient.GenericSelectSpec, DatabaseClient.GenericUpdateSpec, DatabaseClient.InsertIntoSpec, DatabaseClient.InsertSpec<T>, DatabaseClient.SelectFromSpec, DatabaseClient.SelectSpec<S extends DatabaseClient.SelectSpec<S>>, DatabaseClient.SqlSpec, DatabaseClient.TypedDeleteSpec<T>, DatabaseClient.TypedExecuteSpec<T>, DatabaseClient.TypedInsertSpec<T>, DatabaseClient.TypedSelectSpec<T>, DatabaseClient.TypedUpdateSpec<T>, DatabaseClient.UpdateMatchingSpec, DatabaseClient.UpdateSpec, DatabaseClient.UpdateTableSpec
Modifier and Type | Method and Description |
---|---|
reactor.core.publisher.Mono<Void> |
beginTransaction()
Deprecated.
Start a transaction and bind connection resources to the subscriber context.
|
static TransactionalDatabaseClient.Builder |
builder()
Deprecated.
Obtain a
DatabaseClient builder. |
reactor.core.publisher.Mono<Void> |
commitTransaction()
Deprecated.
Commit a transaction and unbind connection resources from the subscriber context.
|
static TransactionalDatabaseClient |
create(io.r2dbc.spi.ConnectionFactory factory)
Deprecated.
A variant of
create(ConnectionFactory) that accepts a ConnectionFactory . |
default <T> reactor.core.publisher.Mono<T> |
enableTransactionSynchronization(reactor.core.publisher.Mono<T> publisher)
Deprecated.
Enable transaction management so that connections can be bound to the subscription.
|
default <T> reactor.core.publisher.Flux<T> |
enableTransactionSynchronization(org.reactivestreams.Publisher<T> publisher)
Deprecated.
Enable transaction management so that connections can be bound to the subscription.
|
<T> reactor.core.publisher.Flux<T> |
inTransaction(Function<DatabaseClient,? extends org.reactivestreams.Publisher<? extends T>> callback)
Deprecated.
Execute a
Function accepting a DatabaseClient within a managed transaction. |
TransactionalDatabaseClient.Builder |
mutate()
Deprecated.
Return a builder to mutate properties of this database client.
|
reactor.core.publisher.Mono<Void> |
rollbackTransaction()
Deprecated.
Rollback a transaction and unbind connection resources from the subscriber context.
|
reactor.core.publisher.Mono<Void> beginTransaction()
reactor.core.publisher.Mono<Void> commitTransaction()
NoTransactionException
- if no transaction is ongoing.reactor.core.publisher.Mono<Void> rollbackTransaction()
NoTransactionException
- if no transaction is ongoing.<T> reactor.core.publisher.Flux<T> inTransaction(Function<DatabaseClient,? extends org.reactivestreams.Publisher<? extends T>> callback)
Function
accepting a DatabaseClient
within a managed transaction. Error
signals
cause the transaction to be rolled back.callback
- default <T> reactor.core.publisher.Mono<T> enableTransactionSynchronization(reactor.core.publisher.Mono<T> publisher)
publisher
- must not be null.Mono
.default <T> reactor.core.publisher.Flux<T> enableTransactionSynchronization(org.reactivestreams.Publisher<T> publisher)
publisher
- must not be null.Flux
.TransactionalDatabaseClient.Builder mutate()
mutate
in interface DatabaseClient
static TransactionalDatabaseClient create(io.r2dbc.spi.ConnectionFactory factory)
create(ConnectionFactory)
that accepts a ConnectionFactory
.create
in interface DatabaseClient
factory
- The ConnectionFactory
to use for obtaining connections.DatabaseClient
. Guaranteed to be not null.static TransactionalDatabaseClient.Builder builder()
DatabaseClient
builder.builder
in interface DatabaseClient
Copyright © 2018–2019 Pivotal Software, Inc.. All rights reserved.