Introduce TransactionOperations.execute(Runnable) convenience method

Closes gh-23250
This commit is contained in:
Juergen Hoeller 2019-07-17 22:35:26 +02:00
parent 7f33344784
commit 2c33c11d4c
2 changed files with 29 additions and 0 deletions

View File

@ -44,6 +44,28 @@ public interface TransactionOperations {
@Nullable
<T> T execute(TransactionCallback<T> action) throws TransactionException;
/**
* Execute the action specified by the given {@link Runnable} within a transaction.
* <p>If you need to return an object from the callback or access the
* {@link org.springframework.transaction.TransactionStatus} from within the callback,
* use {@link #execute(TransactionCallback)} instead.
* <p>This variant is analogous to using a {@link TransactionCallbackWithoutResult}
* but with a simplified signature for common cases - and conveniently usable with
* Java 8 lambda expressions.
* @param action the Runnable that specifies the transactional action
* @throws TransactionException in case of initialization, rollback, or system errors
* @throws RuntimeException if thrown by the Runnable
* @since 5.2
* @see #execute(TransactionCallback)
* @see TransactionCallbackWithoutResult
*/
default void execute(Runnable action) throws TransactionException {
execute(status -> {
action.run();
return null;
});
}
/**
* Return an implementation of the {@code TransactionOperations} interface which

View File

@ -31,13 +31,20 @@ final class WithoutTransactionOperations implements TransactionOperations {
static final WithoutTransactionOperations INSTANCE = new WithoutTransactionOperations();
private WithoutTransactionOperations() {
}
@Override
@Nullable
public <T> T execute(TransactionCallback<T> action) throws TransactionException {
return action.doInTransaction(new SimpleTransactionStatus(false));
}
@Override
public void execute(Runnable action) throws TransactionException {
action.run();
}
}