что именно «Распространение.»REQUIRES_NEW» означает использование Spring transaction management?

#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 говорится: » Если клиент вызывает с контекстом транзакции, контейнер приостанавливает ассоциацию контекста транзакции с текущим потоком перед запуском новой транзакции и вызовом метода. Контейнер возобновляет приостановленную ассоциацию транзакций после завершения метода и новой транзакции. »