Вы можете использовать Programmati c управление транзакциями aproach.
Spring Framework предоставляет два способа программирования транзакций c:
- Использование
TransactionTemplate
. - Использование непосредственной реализации
PlatformTransactionManager
.
Команда Spring обычно рекомендует TransactionTemplate
для программного управления транзакциями c. Второй подход аналогичен использованию JTA UserTransaction
API, хотя обработка исключений менее громоздка.
Сначала добавьте ссылку TransactionTemplate
в ваш компонент.
// single TransactionTemplate shared amongst all methods in this instance
private final TransactionTemplate transactionTemplate;
Затем инициализируйте ваш атрибут Consumer<String>
в методе инициализатора, помеченном @PostConstruct
@PostConstruct
public void init() {
saveTransaction = (uniqueId) -> transactionTemplate.execute(new TransactionCallbackWithoutResult() {
protected void doInTransactionWithoutResult(TransactionStatus status) {
Transaction transaction = new Transaction();
transaction.setUniqueId(uniqueId);
transactionRepository.save(transaction);
}
});
}
Согласно Spring Docs:
Programmati c Управление транзакциями, как правило, хорошая идея только если у вас есть небольшое количество транзакционных операций. Например, если у вас есть веб-приложение, которое требует транзакции только для определенных операций обновления, вы можете не захотеть устанавливать транзакционные прокси с использованием Spring или любой другой технологии. В этом случае использование TransactionTemplate может быть хорошим подходом. Возможность задать имя транзакции в явном виде - это то, что может быть сделано только с помощью программного c подхода к управлению транзакциями.
Зачем использовать @PostConstruct?