#spring #transactions
#spring #транзакции
Вопрос:
мое замешательство, связанное с этим вопросом, заключается в том, как мы можем использовать ранее созданную транзакцию? или, другими словами, со сколькими потоками может быть связана транзакция?
Ответ №1:
Транзакция может быть связана только с одним потоком в spring. Что ж, приложив некоторые усилия, вы можете сделать это длительной транзакцией, но это afaik с защитой от шаблонов.
REQUIRES_NEW
означает, что всякий раз, когда поток программы входит в аннотированный метод, новая транзакция будет запущена независимо от любой существующей транзакции.
REQUIRED
означает, что существующая транзакция будет использована повторно, или, если существующей транзакции нет, будет запущена новая.
Комментарии:
1. Спасибо. это тоже наоборот? значение может ли поток иметь больше транзакции или только одну? и то же ли это в фреймворках, отличных от spring?
2. в одном потоке может быть более одной транзакции. Я не знаю для других фреймворков, но я предположил, что это то же самое.
3. Но что происходит с существующей транзакцией, когда
a new transaction will be started regardless of any existing transaction
? Это будет зафиксировано непосредственно перед запуском новой транзакции? Или это будет откат? Или будут выполняться две транзакции одновременно? Если да, то в какие моменты каждый из них будет зафиксирован / откатан? В конце каждого аннотированного метода, соответствующего каждой транзакции?4. В документации Spring говорится: » Создайте новую транзакцию и приостановите текущую транзакцию, если таковая существует. Аналогично одноименному атрибуту транзакции EJB. » В документации Java EE говорится: » Если клиент вызывает с контекстом транзакции, контейнер приостанавливает ассоциацию контекста транзакции с текущим потоком перед запуском новой транзакции и вызовом метода. Контейнер возобновляет приостановленную ассоциацию транзакций после завершения метода и новой транзакции. »