Sobes.tech
Назад к вопросам
Junior — Middle
132

Каким образом инициировать новую транзакцию в сервисе, не используя внутренние зависимости (Self Injection)?

Компании, где спрашивали
СБЕР КорпусСБЕР Корпус

Ответ от нейросети

sobes.tech AI

В Spring для инициирования новой транзакции без использования self-injection можно применить программное управление транзакциями через TransactionTemplate или PlatformTransactionManager.

Пример с использованием TransactionTemplate:

@Service
public class MyService {

    private final TransactionTemplate transactionTemplate;

    public MyService(PlatformTransactionManager transactionManager) {
        this.transactionTemplate = new TransactionTemplate(transactionManager);
    }

    public void method() {
        transactionTemplate.execute(status -> {
            // код, выполняемый в новой транзакции
            return null;
        });
    }
}

Такой подход позволяет явно управлять границами транзакций без необходимости вызывать методы через прокси самого бина (self-injection). Это особенно полезно, когда нужно гарантировать, что код выполнится в новой транзакции.